MacBrickout 4.0 Progress Log. Back when I was programming Sega Saturn and Sony Playstation games,
one of my job duties entailed maintaining a "P3" report. "P3" stood for Progress, Plans and
Problems. Once a week, we'd turn in our P3's which would give managemt vital information on what
direction the project was taking. They could identify problems quickly and intervene when necessary.
At the end of the week, I'd always find it hard to remember everything I did over the past several
days, so I got in the habbit of logging down my tasks on a daily basis. When I started working on
MacBrickout, I found it hard to break that habbit so here is a fairly complete log detailing the
development of MacBrickout 4.0.

8-24-96 Initial concept
4-1-97 Initial Programming

Long break

10-12-97 Resumed programming. Rewrote everything. Now it's object oriented! Started keeping a
log of my work.
10-15-97
Added preferences capability.
Added ASSERTS()

10-18-97
Cleaned up more code. Added prelim shadows to bricks. Implemented textured bricks.
Smartened up the collision detection routines. If the intersection between the ball
and a brick is a perfect square, the collision detection routines decide the best angle
of deflection for the ball. Ran into a problem though. I need to modify the code so that
it only processes the collision with the brick the ball is most touching. Right now, if
the ball is simultaneously touching two bricks, both collisions get processed and the ball
deflection angle is wrong.

10-24-97
Did some more code cleanup. Thinned out bricks.h. Made the ball always green when it
starts out. Added a textID field to the Brick datastructure. Bill Kelly came over and
converted the whole thing to C++. We were up until 5:30 in the morning. Yikes! Now I'm
afraid to touch anything. I guess I need to start learning C++ now!

11-1-97
Added a vertical range for the paddle. Made the brick shadows work correctly. Now when a
brick disappears, it doesn't mess up the brick next to it if it or its shadow is overlapping
the other brick. Got DrawCells() working again.

11-2-97
Modified AddBrick() to include the shadow of a brick when it's calculating the cellRange.

11-4-97
Tuned up the collision resolution. Now the ball bounces correctly if it simultaneously
collides with two bricks. Also, in that case, only one brick will disappear unless the
area of the intersection rectangles of the ball and each brick is the same. If so, both
bricks will disappear.

11-5-97
Made it so if the ball lands precisely in the corner created by two bricks situated
kitty-corner from each other, both bricks will disappear. Implemented separate level
files. In addition, I added a default level folder select dialog box. Once you pick
your default levels, it gets saved in the preferences. Added "New Game" to the file
menu.

12-5-97
Made the bricks draw in front of the border. Cleaned up DrawBorder() so that it takes
no arguments. Fixed a bug where level data was being used when the game was resumed but
the level had been previously closed so the level data was invalid.

12-28-97
Made the game display a 640x480 window on a 1024x768 screen, preventing the need to switch
the monitor into 640x480 resolution every time I compile and run. Had to add the
SCREENWIDTH define in display.h. Added collisionRadius field to the sourceImages data
structure. Came up with the "expanding brick" method of detecting collisions between balls
and bricks.

1-1-98
Wrote 90% of the new brick/ball collision algorhythm. Will finish it up tomorrow.
Put a delay in the code which sets the drawsprocket state to inactive. This seems to
clear up a crash bug that occurs when it tries to restore the display when you quit the
game. Got rid of a bunch of old collision code.
1-2-98
Came up with a "blow out the candles" bonus level idea. Will implement it later... Fixed
the remaining ball/brick collision detection bugs. Gave the balls three collision states
so that they can (a)destroy bricks, (b)merely bounce off of bricks w/o destroying them, or
(c) go straight through bricks w/o affecting them or being affected. Made ball move
slower if its collision is turned off. Essential for the start of a level. Got
MacBrickout to load both old style levels and new style levels. Got some of the level
editor working again (since the c++ overhaul). You can now add and delete bricks as well
as drag them around. Made the menu bar appear and disappear appropriately depending on the
positioning of the cursor.
1-3-98
Fixed a bug in the level editor where creating new bricks was hosing up the linked lists
of bricks and eventually tripping an ASSERT. Decided I needed to get some sort of font
going for the level editor (and for the rest of the game for that matter) so I started
writing a simple font cutter tool to facilitate adding and modifying fonts. Finished
the font cutter tool. It's actually pretty cool! The font cutter tool now cuts a font
and saves it out as a 'font' resource in the MacBrickout app. The width/height/offset
map is also saved out in the same 'font' resource. Coded up the new text routines in
MacBrickout. They seem to work just fine. 3:00am. g'nite!
1-4-98
Modified the font cutter to run in an event loop. Now you can specify which PICT
resource file you want to open. It makes a separate .map file for each PICT file you
open. The .map file contains the width, height and offset information for each character
you edit. Also, the tool now only saves out the data you've "stamped". None of the
blank space between characters is saved. Modified MacBrickout to handle the new font
data format. Cut a font and loaded it into the game. Created the score bar. Made all
the info, Balls, Level, Mult and Score display properly.
1-5-98
Cleaned up some visual glitches. The score bar wasn't being drawn at the start of a new
level, etc. Made the levels increment as you complete them. Made the Mult not carry over
to the next level. Got the Balls counter working. Made passive balls turn active if you
lose a ball and your ball's counter is already 0. Cleaned up all of the messy flashing
when you first start up MacBrickout. Also cleaned up the flashing when you select "new
game".
1-6-98
Got silver bricks working. Got gold bricks working. Made silver bricks flash. Needs
some debugging and tuning up...
1-7-98
Made old style levels have shadows. It just fills in with a solid dark color since there
is no shadow ppat data included with those old levels. Got the flashing bricks totally
working. Just need to change the colors for the gold bricks.
1-8-98
Got scoring to work like the old MacBrickout. Bricks are worth anywhere from 1 to 20
points depending on their height on the screen. The top bricks are worth the most. Got
Starting X and Y positions of ball and Starting angle of ball worked out for the old
style levels.
1-10-98
Messed with getting a linearly tracking mouse driver installed. What a pain. I was
unable to get my 68000 based driver working on the PPC, nor was I able to figure out how
to turn off the acceleration on the standard Apple mouse driver.
1-12-98
Started modifying the font cutter tool to also handle sprite animations. Added the
OBJECT and ANIM LISTS menus. Made it possible to actually add objects to the OBJECT
menu and name them.
1-17-98
Made a separate sprite cutter application project. It was getting rather hairy trying to
make the font cutter also be a sprite cutter.
1-18-98
Made a lot of progress on the sprite cutter. Anim List menu is now working. Sprite
frame numbers are displayed in the frame bboxes. You can delete frames by hitting the
delete key. The tool keeps track of multiple objects and multiple anim lists. You can
save and load the sprite map data.
1-19-98
Worked some more on the sprite cutter tool.
1-20-98
Got all the menus working perfectly. Added the close file option. The screen goes black
when you close a file. Cleaned up a bunch of graphic glitches. Still having some
problems with the menu bar getting partially erased. For now, I'll keep it as a low
priority fix.
1-30-98
Installed some drop-in code that Kirk gave me. It replaces the mouse's acceleration table
with a custom acceleration table. I can now effectively turn off the mouse's acceleration.
Yay! I can't figure out which values to use to get the right speed though. Right now
the paddle moves too slowly. Need to do some research on those acceleration tables....
1-31-98
Worked on getting the sprite cutter tool to output object, animlist and frame data. Also
got it to output a .h file that gets included into the MacBrickout source code. the .h
file contains all the Object ID's so the code can refer to each object by name.
2-1-98
Looks like I got the sprite cutter tool to output all the necessary animation data correctly.
I won't know for sure until I try to use that data in MacBrickout. My job now is to add
code to MacBrickout that will handle this new data and display animated sprites on the
screen!
2-7-98
Got MacBrickout to read in all of the sprite bitmap data. It also creates mask and inverse
mask data out of that data.
2-8-98
Got MacBrickout to correctly display all frames of animation after reading in the bitmap
data. I cheated and wrote a simple loop to sequence through all 186 frames of animation.
Now I need to write the animation engine which will process the anim lists created by the
offline sprite cutter. Got rid of texture.h, gfxobj.cpp and gfxobj.h. A whole bunch of
code needed to be changed in order to remove those obsolete files and incorporate the
offline sprite cutter data. Whew! It's starting to look like a game again!
2-10-98
Got the animation engine almost totally working. All sprites show up and animate correctly.
I just need to add a timing thing because they animate way too quickly! Got the rest of
the code working again (I had to disable a lot of stuff when I first started bringing up
the new animation engine).
2-11-98
Added the timing thing so the sprites don't animate so fast. Added capsules.cpp and
capsules.h. Made it so bricks drop random capsules when they disappear. Added the chaos
capsule. Changed the ball-in-sand artwork so that the sand isn't part of the ball. This
looks a lot better when balls get lodged in the sand right next to each other. Brought
over the MacBrickout 3.0 code that decides which capsules to drop when.
2-16-98
Struggled with stupid C++ syntax errors. Didn't make any progress! Argh!
2-17-98
Finally got my capsule module working. Now I'm off to tackle the ball and paddle classes.
Cleaned up the ball and paddle classes. This triggered a domino effect. I ended up going
through all of the source files, rearranging stuff and rewriting a few things. The code
is a lot more C++ now. Boy, I'll be happy when I'm more comfortable with this language!
2-18-98
Didn't get a chance to work on MacBrickout 4.0, but I finally fixed the error -39 bug in
MacBrickout 3.1.1. Released version 3.1.2 and version 3.1.2 (Japan).
2-19-98
Figured out how to overload the new and delete operators. Implemented a better sprite
memory management scheme. Now I can delete sprites! The sprites are now in a linked list
instead of a linear array. Added priorities. When you add a sprite to the display list,
the sprite manager inserts it into the list at the proper point so that they sprites always
get drawn from lowest priority to highest priority. Right now, I have it set to CAPSULE,
BALL, PADDLE so a ball will always be drawn in front of a capsule and a paddle will always
get drawn in front of a ball and a capsule. Made the capsules disappear when the paddle
collides with them. Made the capsules stop animating when they hit the sand.
2-21-98
Implemented multiple stage up/down capsule functionality. Implemented red-x capsule
functionality. Made capsules disappear 5 seconds after they land in the sand.
2-22-98
Made the sprite cutter only save out unique frames. This cut about 6K off of the size
of the frame database. Added a whole project concept to the sprite cutter. Now you can
open numerous PICT files which are contained inside one "project" and cut sprites from
all of them. When you're all done, you can save out a database of all the sprites. I
still need to write the code that will grok the project and build one giant database...
2-23-98
Made sprite cutter spit out a correct objects.h file
2-24-98
Got the sprite cutter to spit out what seems to be a correct sprite database. But for some
reason, MacBrickout's only displaying green balls and a few capsules. Not all sprites are
appearing. 1:00am. Will figure it out tomorrow...
2-25-98
Ahhh. The anim list offsets weren't being calculated correctly. Fixed the bug and now all
the sprites show up. Yay! Now I can have a bazillion animated sprites in the game!!! Drat!
Now I need a way to loop, suspend and terminate animations. Started programming some frame
attributes functionality into the sprite cutter. Added a FRAMES menu. The correct number
of frames show up in that menu for each animlist of each object selected. Made a dialog
box pop up when you select a frame from the frames menu.
2-26-98
Got the frame attributes dialog box functionality working. You can click on the checkboxes
and enter data in the textEdit fields and it gets saved in the sprite cutter data file.
Made that data get saved out in the MacBrickout database, but I haven't tested it yet...
2-27-98
Fixed a bunch of bugs in the frame attributes data. Wrote the code that digests the frame
attributes data (in MacBrickout). Cut some new sprites and got them up on the screen
quickly. This sprite cutter's cool! The animation hotspots aren't working. 2:25am. yawn.
I'll fix them tomorrow...
3-1-98
Got the hotspots working. Capsules now sink into the sand! Added 3-capsule functionality.
Added the slow and fast capsule functionality. Added catch capsule functionality. Added
free ball capsule functionality. Added bubble artwork. Made bubbles drift downward. Made
3rd bubble drift faster than the others. Added collision detection between paddle and
bubbles. Added collision detection between balls and bubbles. Made bubbles pop. Added
scoring for bubble popping. Made paddle lose catch ability if it touches a bubble. Added
chaos capsule functionality. Made catch ability go away if you lose a ball.
3-2-98
Made red X capsule fall from paddle when the redX situation is remedied. Made placebo pill
not do anything. Added 6-capsule artwork. Added 6-capsule functionality.
3-3-98
Got resume game functionality working. Added DownUp capsule artwork. Added DownUp capsule
functionality. Locked hidden cursor to paddle range area. That way if you rolled all the
way up to the top of the mouse pad, then rolled back down, the paddle would instantly start
moving back down. Before, the paddle would be stuck at the top of its range until the
cursor caught up with it, then it would start moving down. Messed around with the accel-
eration table some more. Made the ball change direction if it doesn't hit anything for 8
seconds (which usually means it got stuck in a pattern bouncing between gold bricks). Fixed
a bug in the sprite manager where it wasn't linking sprites into the very first slot in the
display list (when the new sprite had a lower priority than the existing sprite).
3-4-98
Made it so only one capsule can fall at a time. Added cBubble::Init() and cCapsule::Init()
to init the static data members of those modules at the beginning of a game.
3-8-98
Messed around with trying to get the paddle to shrink and expand. Made a bunch of changes
to paddle.cpp but couldn't get anything to work. I'm probably going to have to modify the
sprite manager to handle dynamically sized sprites...
3-9-98
Thought some more about what I need to do to handle a variable sized paddle...
3-10-98
Added some flexibility to the cSprite::Draw() routine. Now it can clip sprites in all dir-
ections. Not only does this add flexibility (I can have sprites smoothly transition from
off-screen to on-screen instead of "popping" them on-screen after they have moved enough to
be entirely drawn), but now I can have a growing and shrinking paddle. If a sprite happens
to be entirely on screen, cSprite::Draw() will use a fast longword blitting method. If the
sprite is clipped, it'll blit the sprite one byte at a time. Found and fixed a bug with
the collision detection routine. After fixing that bug, another one popped up. Now the
ball intermittantly goes through bricks w/o making them disappear. Found the spot where
the collision resolution isn't being handled robustly. Will try to fix, yawn, tomor....
3-11-98
Messed around with collision rectangles. Made no progress!
3-12-98
Fixed the bug with the collision resolution. Floats and Ints were getting mixed and some
precision was getting lost. Fixed a bug where capsules stopped spawning after having a
capsule fall from the paddle. Got the growing and shrinking paddle working. Made some
significant changes to the paddle class. It's even more isolated from the rest of the code
so I can now add multiple paddles and the rest of the code could care less. Added a drop
queue for the capsules. When you lose powerups, they all fall from your paddle.
3-13-98
Fixed some leftover bugs in the paddle width stuff. Made the upDown paddle range have 4
stages instead of 3. Added clear capsule functionality. Made discarded capsules (from
paddle) have a larger range of directions so they spread out more if you have a lot of 'em.
Made capsules deflect off of walls. Implemented falling paddle. Made capsules only fall
when 1 ball is on the screen. Capsules stop falling if more than one ball is active. Made
a bunch of tweeks to game logic.
3-14-98
Modified the sprite clipping routines to clip sprites against the sand surface. Now I don't
need unique frames to depict a sprite in the sand. And now ANYTHING can land and sink into
the sand! Modified the bubble routines to make the bubbles sit on the surface of the sand
for a little while before popping. Got all bubbles, paddles, capsules and balls working
with sand collision. Took out all the anim lists of objects in sand. Tightened up the
sprite cutter code by making it easier to delete anim lists and objects. Made animList name
dialog box default to "norm" for the name. Brought laser artwork into the game. Got laser
balls on screen. Got laser balls to circle around paddle. Got laser balls to travel
upward when the mouse button was clicked. Got laser ball to brick collisions working. Got
laser ball to bubble collisions working. Implemented laser disabling functionality (dropping
laser capsules from paddle, etc.). Made lasers disable when you finish a level, lose a
ball, or touch another bubble with the paddle. 2:00am. Gotta get up in 4 hours.
3-15-98
Made it so if just one capsule is dropping from the paddle, it always drops straight down.
The rest can drop at various angles. Made chaos capsules keep animating when they hit the
sand. Fixed a bug where not all of the bricks were getting drawn if the Button was held
down at the start of a new level. Converted the entire brick module to C++. Whew! Rewrote
the collision detection routines. The balls are finally behaving exactly how they should.
Got the sound working again.
3-17-98
The paddle didn't go all the way to the right wall. Fixed it. Got shadows working for
the original 3.x levels. Added clipping functionality to the shadow blitter.
3-18-98
Fixed a shadow bug with the paddle. Made MacBrickout work on systems that can only display
resolutions larger than 640 x 480. Fixed some shadow problems with the bricks. After
converting bricks.c to bricks.cpp, the ball forgot how to change direction if it doesn't hit
a brick for 8 seconds. Fixed that problem. Made the bubbles rest a little higher on the
surface of the sand.
3-19-98
Brought the code and data size of the brick module down from 60K to 10K by removing the
static array declarations of type cBrick and using "new" instead. Removed the static data
array declarations from my other modules too. This reduced the size of the application by
about 100K! Removed the capsule's shadows when they hit the sand.
3-20-98
Fixed a bug where a clear capsule would drop from the paddle when you caught a clear
capsule. Fixed a bug where the laser balls would slide off of the paddle when the paddle
was on either edge of the screen. Fixed a bug where the ball velocity would get out of
control when multiple gold bricks were hit towards the end of a level.
3-22-98
Made the paddle start out a little wider. Put all of the sound effects in the game. Got
sound code pretty much working. There still seems to be a little glitch, so I'll have to
narrow it down later. Made the screen redraw itself so if a screen saver kicks in, you'll
get your screen back when you touch the mouse. Made the paddle start out a little narrower.
It was too wide.
3-25-98
Fixed a bug where the red paddle would turn gray if you popped a bubble with it. Sped up
the gamma fade rate.
3-27-98
Fixed a bug where capsules lodged in the sand would still affect powerups if the paddle
collided with them.
3-30-98
Made it so that caught balls can't penetrate walls (if you caught them on the edge of the
paddle and tried to push them into a wall). Attempted to fix a runaway sound bug (where
every sound in the game gets triggered), but decided that I was going to rewrite the sound
driver to play continuous music so it wasn't worth trying to fix a bug in code that was
going to become obsolete.

4-8-98
Played a game, witnessed a bug in the collision stuff. Jotted down a musical brick idea.
Sigh. Time to get back into MacBrickout programming mode!
4-16-98
Started working on the 2D texture mapper. Wrote code to create 4 points that define the
rotated bounding box of a rotated sprite. Now I just need to fill that box in with pixels.
4-18-98
Coded up the bilinear interpolation routines for the texture mapper. Got the texture
mapper working. Now the sprites can rotate! This will be perfect for the Umphees walking
across the sand. Added bilinear interpolation routines to shadow code so sprite shadows
can rotate too.
4-21-98
Got the profiler working. Found that all of the MacBrickout code is only taking 17% of the
total CPU time alloted. There's plenty of room to grow!
4-22-98
Started working on clipping rotated sprites to the screen. Got rotated sprite clipping
working. Rewrote the sound driver to handle an arbitrary number of channels of sound. I
picked 8 channels for now. There are some unwanted clicks and pops in the sounds that I'll
need to debug tomorrow...
4-23-98
Found and fixed the click and pop bugs in the sound driver. The sounds are sounding great!
And now I can play more than two at once!
4-25-98
Converted Sounds.c to Sounds.cpp. Added volume control and normal/wacky functionality to
Options menu. Converted Preferences.c to Preferences.cpp. Made it so sound volume setting
gets saved in preferences.
4-26-98
Added high score dialog. Added all support code to make that dialog functional. Got most
of the multiple high score list functionality working. If several people in the same
household play the same copy of MacBrickout, they will each be able to have their own high
score list. An all-time high score list will display the best scores from the other lists.
It's almost working right now, but it's still quite flakey. I will have to finish
troubleshooting tomorrow.... yawn.
4-27-98
Got the high score stuff totally working. The all-time scores list is functional. Coded
up a bunch of user interface stuff (like hiding the popup menus -- both in the file menu
and the high score dialog box -- when there are less than 2 users).
4-28-98
Added game counter. Each score list has its own counter. Fixed a bug where some of the
bricks in level 11 (3.0 level) weren't getting drawn.
5-2-98
Added preliminary umphees.
5-3-98
Fixed a bug where the shadows of some bricks on some levels would show through the bricks.
Fixed a bug where catching a placebo capsule with a red paddle would get you 25,000 points
but wouldn't disable the red-x status. The next capsule you caught would give you another
25,000 points. Fixed a bug where it would always say you completed level 1 in the high
scores dialog. Got Resume and End game working in the file menu. Made the capsules rotate
at various speeds clockwise and counter-clockwise. Made the bonus capsules give you 1000
points for catching them. Started border.cpp module. It looks like I'm going to have to
write a tool to lay out borders....
5-9-98
Fixed some visual bugs that were caused by the new tiled borders. Sped up the initial ball
speed slightly. Made it so if you have up/down ability, the capsules fall faster. Slowed
down the amount the ball speeds up each time it hits the paddle.
5-13-98
Sped up the bubbles slightly. Messed around with the mouse acceleration tables and got a
better "feel" for the paddle. Reset paddle X after LimitBoundsToPlayArea() to keep paddle
from "sticking" to walls. Made free ball capsule disable all clear stages and return the
ball to light green if it's caught.
5-25-98 - 6-1-98
Been trying to get the 68K version working. Got my IIci networked to the 7100 to
facilitate the process.
6-1-98
Spent all day trying to come up with an elegant solution to the bricks (that overlap the
border) taking chunks out of the border when they disappear. No luck. Also worked on
a TV. Something wrong in the power supply (before the flyback). Wasn't able to track it
down yet. Bah! Wasted day!
6-3-98
Ok, the border tiles are now stored in an array. GetPicture() and DrawPicture() were just
too slow. Tomorrow, I'll work on reading just the data I need out of the array to replace
the chunk of border that vanished when the overlapping brick disappeared.
6-4-98
Got the left border all cleaned up. Tomorrow, top and right borders...
6-5-98
Got right border almost cleaned up. There's still some residue ONLY if a shadow passes
over the right border...
6-6-98
Got shadows working with old-style MacBrickout levels. All you need to do is add a res-
ource with ID 1001 to the level file. Half of paddle's shadow was offset vertically from
the other half when it hit the sand. Fixed it. Fixed a bug where the right side of a
sprite's shadow had garbage in it when it was rotated a certain direction. Added
juggling functionality.
6-7-98
Got sprite shadows to "bend" when they hit the right border.
6-12-98
Fixed bug where bending shadows weren't working with balls. Added GetUpDownRange() to
paddle.cpp. This was for the capsule::Init() to decide to have capsules fall fast or
slow. Made jugglin bonus so it wouldn't double-trigger.
6-13-98
Broke the code in cBrick::Delete() that erases bricks from the screen out into a separate
function: cBrick::Erase() since Delete() was starting to get too large and unruley. Made
brick shadows bend on right wall. Finally fixed that TV from 6-1-98. Bad diode in the
16V supply. Instead of having multipler reset at the end of a level, I decided to keep
it like the old MacBrickout and carry it over to the next level.
6-26-98
Made the umphees rotate and move up and down on the sand dunes.
7-1-98
Drew a new umphee. Looks more like a roley-poley. Hmmm. Elizabeth thinks it needs some
more work...

LONG BREAK!

8-3-98
I'm the proud father of a brand new baby daughter! Yay!

8-22-98
Fixed a bug where the ball would sometimes deflect at a funny angle. The bug would only
happen when the ball hit two or more bricks at exactly the same time. Fixed a bug where
if you paused the game with catch enabled (green paddle) and started a new game, the paddle
would start out green instead of gray. Made it so in clear mode, if you have catch and
lasers, the paddle is green with red laser balls. Also in clear mode, I made it so that
capsules will continue to fall if more than one ball is on the screen. Made the clear
mode local to each ball instead of global across all of the balls. That way, you can find
yourself juggling a green ball, clear ball and yellow ball and having to decide which one
you want to keep. I don't know if I like it. I'll have to play around with it some more
and see how it plays....
8-23-98
I didn't like it. Switched the clear mode back to globally affecting the balls.
8-24-98
Created a User:: class that keeps track of the frequent players. This code was in the
Scores:: class but it no longer made sense to have it there. Now I've got a ton of
compile errors! I will need to rewrite the User and Scores classes so that they'll be
more friendly with each other.
8-26-98
Decided to display the level set in the high score dialog. That way, people can see which
group of levels they played to achieve that particular high score. I busted a bunch of
code out of scores.cpp and created user.cpp which will handle managing everything to do
the different users or game players.
8-27-98
I QUIT MY JOB TODAY! Yikes. I'm hoping to be a stay-at-home dad, work on MacBrickout and
do electronic repairs for people!
8-28-98
Fixed all the compile errors created from splitting scores.cpp into user.cpp and scores.cpp.
Made it so if the person hits ERASE in the high scores dialog and then selects a new user
from the popup menu, the scores they erased will remain erased.
8-29-98
I had moved the default level group folder into the userdata. That way, when each user
starts a new game, it'll start up with their favorite levels. This posed a problem in that
MacBrickout had no idea who was sitting at the computer until the user selected "New Game".
The problem is, the user usually selects the level set BEFORE starting a new game. I
moved the default level group out of the user data and back into the preferences. Now there's
only one default level set. I figured it's no big deal to pick a level group before
starting a new game if the current level group is undesirable.
Got the level group name to appear in the high score dialog. There are still some wacky
glitches in the high score code that I'll need to address next...
8-30-98
Fixed the wacky glitches. Now I need to get the screen to redraw correctly when recovering
from a screen saver interruption.
8-31-98
Got the high score dialog to recover from a screen saver. The main game screen goes black
though. It doesn't look bad, but it does kind of bother me. I would rather have the main
game screen recover correctly too. So far, I haven't figured out how to do it. I'm tired
of working on high score stuff. I'll move on to something else and maybe come back to this
later... Made MacBrickout redraw the level after the user selects a new level group.
9-2-98
I was having problems with the cursor getting erased when the screen redrew. As soon as you
touched the mouse, the cursor would reappear but it would cut a rectangle out of the screen
where the cursor was. Fixed. Added "oh yeah" sound when the multipler = 50. Added a
text-entry limiter in the high score dialog. Now it won't let you type in a name that would
exceed the alloted space to display the name in the high score dialog. Added a new function
called RestoreScreenFromUnderlay() which restores the screen when you return to MacBrickout
after switching to some other application in the Finder. Wrote a cool filter for the "You
got a high score!" dialog. It doesn't allow you to enter more than 32 characters and also
limits you to the amount of space defined by the textEdit box in that dialog. Got rid of
the erase button in the high score dialog. Made it so you can option-click individual items
of the high score dialog to erase them. Option-click again to unerase. Added haha feature.
9-4-98
Fixed a nasty bug in the sprite cutter where the loop command wasn't accounting for the
existance of other anim commands in the anim list. The bug didn't turn up until I inserted
a hold command for animation of the blinking warp button. Got the blinking warp button
to appear in MacBrickout. The button looks too plain. I'll have to figure out a way to
make it look better...
9-5-98
Made it so balls won't pop bubbles when they first start out until they hit the paddle for the
first time.
9-6-98
Fixed a bug where a newly spawned sprite would get displayed before all of its information
got filled in (Basically BlitSprites() was drawing it before AnimateSprites() had a chance
to fill in its frame info). Put commas in the scores in the high score dialog. The rate at
which the animations play back was driven by the screen refresh rate. I changed it to go by
the global 60Hz ticks so the animation would play back at the same speed no matter how fast
your screen refreshed.
9-9-98
Got rid of an annoying menu bar flash by changing the way the screen gets redrawn when an
UpdateEvt happens. Fixed some bugs in the H.S. dialog where erasing one line would wipe out
a row of pixels in the line above. Also changed the artwork in the H.S. dialog.
9-16-98
I'm redoing how the border is drawn and processed. No more tiles. Trashed border.cpp and
started over from scratch. Got the border drawn using the new method. No sand yet. Fixed
a bug in the sound stuff where the sound volume would max out every time you selected normal
or wacky from the sound menu.
9-17-98
Moved the border collision detection over to border.cpp (makes sense huh?). Now anything
can collide with the border if it wants to (not just balls). Also, paved the way to implement
warp tunnels.
9-18-98
Drew a cool warp tunnel animation. For the life of me, I couldn't get it imported into the
game. The stupid sprite cutter kept crashing or corrupting the data. I've had enough of
this! I'm rewriting it in C++!!!
9-19-98
Converted projectManager.c to projectManager.cpp
9-20-98
Created entity.cpp. An entity is an object such as a bubble, ball or capsule. Each entity
can have a variable number of anim lists (bubble grow and undulate, bubble pop, etc.) and
each anim list can have a variable number of frames. Added preliminary functions: default
constructor, new and delete operators, Entity::Add(), Entity::GetCurrent(), SetCurrent(),
SetName(), etc.
9-21-98
Made a lot of progress, adding to entity.cpp and rewriting spriteMaker.c
9-22-98
Ugh, I overcoded today. Spent the entire day working on the sprite cutter. I couldn't even
say what the weather was like outside. Made a LOT of progress but still not done...
9-23-98
Created utility.c and moved a bunch of routines in there. The sprite cutter code is starting
to become a lot more organized! Another LONG full day of programming.
9-24-98
Got the sprite cutter pretty much done. It's a lot more flexible than it was before and
NO CRASHES! Just a few cosmetic changes need to be made. Got the new warp tunnel imported
into MacBrickout. I noticed the animation stutters when it loops to the first frame.
Troubleshot, and noticed that the problem is in the animation play back code, not the data
brought in from the sprite cutter. Fixed a bug in the animation engine where it was playing
the "loop to" frame twice. Fixed a problem where the sprite shadows that were turned off
(umphee, warp tunnel, etc.) would come back on when you resumed a game.
9-25-98
Got the sand back. Fixed the garbage left on the right border when a brick disappears.
Fixed a bug where the balls would disappear as soon as they hit the sand. Fixed a bug where
the balls suddenly started off destroying bricks. It turned out that the paddle bbox was
initialized incorrectly causing an instant collision with a ball when it first appeared.
Fixed a crash bug where the top wall of the border wasn't being redrawn correctly when an
overlapping brick disappeared. Discovered a few more bugs. Duooh!
9-26-98
Fixed a bug where falling capsules would go off the right side of the screen instead of
bouncing off of the wall.
9-27-98
Fixed a bug where the sand was being drawn at the top of the underlay screen. It would
show up only when objects passed over certain areas at the top of the screen. Fixed a bug
where the paddle wouldn't sink into the sand when it fell. Whew. I almost have all the bugs
on my bug list fixed. Soon, I'll be able to add more features!!!
9-29-98
Got basic warp tunnel functionality working. Still needs a few touchups though...
9-30-98
Drew "Get Ready" text. Got basic functionality working.
10-1-98
Fine tuned "Get Ready" functionality. Made ball wait until "Get Ready" fell into the sand.
Moved LaunchBall() into balls.cpp. Added "Game Over" text. The white text looked kind of
drab so I colorized it. It now has a blue gradient at the top, a green gradient at the bottom
with some funny looking "buildings" on the horizon. Much more attractive to the eye! Added
"Paused" text. Made all objects halt when "Get Ready" is displayed. It's still a little
weird so I'll do some more fine tuning tomorrow.
10-2-98
Made previous letters from "Get Ready" or "Paused" disappear if more letters come up -- like
if you quickly and repeatedly pause and resume the game. Made all active capsules permanently
disappear when you lose a ball. Made bubbles keep on floating down when any Alpha Text is
on the screen (All other sprites except for the paddle freeze while Alpha Text is on the
screen). Extended the length of time the bubbles remain in the sand before they pop. Made
the paddle not expand from zero when resuming a paused game. Made display shift down when
you pause or the game is over. That way, the score is not obscured by the menu bar. Added
a bunch of different colored balls. Now I need to figure out what they're all going to do!
10-4-98
Limited warp tunnel placement so it wouldn't be too high or too low. Added closing warp
tunnel (left). Added artwork for right warp tunnel, not in game yet... Fixed a bug where
sometimes, bricks would stop dropping capsules.
10-5-98
Got right warp tunnel working. Increased number of warp tunnels to 2.
10-7-98
Added preferences dialog box. Added custom slider control CDEF to preferences dialog. Got
slider (paddle speed) functionality working. Ahhh, finally got the mouse acceleration tables
figured out. This problem had been bugging me since Janurary! It turned out to be a bug
where the mouse acceleration tables weren't longword friendly. In other words, the
structures are layed out in this fashion:

struct
{
long
short
long
}

The offset to the 2nd long isn't calculated correctly by the compiler because it exists at
a non longword aligned address. Of course, these structures work fine on the 68K which was
what was being used at the time the structures were designed.
10-8-98
Fixed a bug where the chaos capsule wouldn't give you any goodies. Increased initial ball
speed. Also increased the effect of the fast and slow capsules. Drew new warp tunnels.
Increased angle variance of ball when it goes for too long w/o hitting any bricks. Made
warp tunnel (that you just warped through) persist to the next level . You basically get
one chance to hit the ball through it again. If you miss, it vanishes. Added the
AddScore() routine which gets called after you warp through a tunnel. It takes care of
slowly incrementing the score and playing the ding ding ding sound.
10-9-98
Fixed a bug in the animation engine. When you called SetAnimList() to change an animation
of a particular sprite, it would play the first frame of the new animation twice! Added
ability for balls to start off with collision on or off. Made ball stick solidly to the
paddle while caught. Before, it would drift from side to side, lagging behind the paddle,
as you moved the paddle left and right. Made warp sound play when you catch a warp capsule.
Only made paddle speed control appear in preferences dialog if a 200dpi mouse is present.
Otherwise, it says "Fixed".
10-11-98
Level names are now displayed. Fixed a bug where catch wouldn't persist to the next level.
Fixed problem with sprite shadows looking weird on the edges of flashing bricks. Made
"Get Ready" text bounce a little before falling to the sand.
10-12-98
Made screen scroll down when you pause (instead of popping down) to show the score bar under
the menu bar. Had some problems getting it to scroll up. Posted a help request on the Mac
Games Developer mailing list. Waiting for a reply. Implemented beginner mode. The speed
of the ball is cut in half and the scoring is reduced by half. Added sand.cpp. Drew sand
artwork. Now objects throw sand when they land. Fixed a bug where the warp capsule would
never fall.
10-13-98
Made it so that any bricks that are in the middle of flashing when GAME OVER happens, get
reset to normal appearance. That way, the screen won't show any bricks stuck in "suspended
animation".
10-14-98
Got the screen to scroll back up properly when resuming a paused game. Also made the
"Paused" graphic stay on screen while it scrolls. Removed a bunch of obsolete code in
display.c (GraphicsDoUpdateEvent(), InvalidateContentRect()). I was able to simplify some
other modules that called these functions. Now display.c has RedrawScreen() that gets called
whenever the screen needs to be refreshed (like when returning from a screen saver or when
a dialog box goes away).
10-15-98
Spent much of the day simplifying the code by putting a bunch of tasks that used to be in
the main body of the code into the constructors of various classes. Made it so capsules
won't get spawned from the very last brick in a level. This prevents a capsule from briefly
appearing, then disappearing due to level completion.
10-16-98
Added ability to type in a code from the keyboard and MacBrickout will recognize it. Added
Secret menu. Made Secret menu toggle on and off when you type in the right code. Added
ability to advance or go back one level via the Secret menu. Added ability to jump directly
to a particular level. Added command-key equivalents to the Player popup menu. Now people
can just hit command-1 or command-2, etc. to start a new game. Figured out how to get rid
of that annoying HELP menu that the System forces upon every application. Removed command
keys when user list is displayed in Frequent Users dialog and High Score dialog. Started
working on Remove User code.
10-17-98
Got the Remove User code working. Turned off the appropriate parts of the dialog box when
there are no more remaining users to remove. Printed the user's name in the sand only on the
first level. This is to help avoid accidently playing under someone else's identity (it's
easy to accidently hit the wrong command key, play a whole game, get a high score and then
find out it's going to get saved in someone else's high score list!). Added TOOLS menu to
the menu bar. Started working on LevelEdit.cpp. Added 'NEW BRICK' ability. Made it so you
can click on a brick and drag it to a new location. Made it so the attributes (color, size,
etc.) of the last brick you touched are remembered. If you create a new brick, it will be
created using those same attributes. Ran into a problem where the menu bar would flash
annoyingly while using the level editor. This is because DrawSprocket must be in a paused
mode to use the menu but must be in an Active mode to move sprites around. The constant
switching between paused and active causes the menu bar to flash. I need to figure out a
way to keep DrawSprocket in active mode but still allow the use of the menus... Yawn. It's
late. I'll sleep on it...
10-18-98
It was getting ugly trying to let MacBrickout keep track of the differences between the new
style levels and the old 3.0 style levels. I decided to make MacBrickout only handle the new
levels. I've begun writing a level converter tool which updates the old 3.0 levels into 4.0
levels.
10-19-98
Added the Finder Icons for the main application, saved levels and preferences file. Did a
lot of work on the level converter tool.
10-20-98
Basic functionality of the level converter tool is complete. Got MacBrickout to read in the
new level format. Ripped out all of the old level code from MacBrickout. Got level converter
to convert the ppats from MacBrickout 3.0 into PICTS for MacBrickout 4.0. Made the tool save
out a darker version of the PICT for the shadow background.
10-21-98
Converted Level.c to Level.cpp. Got MacBrickout to display a full screen PICT behind the
bricks. Looks pretty cool! It'll tile any size PICT so you can have anything from small
repeating patterns to large full screen pictures as the background. Eliminated a 300K buffer
that had become obsolete. I was originally using it to store the font images but have since
found a more efficient way to do it. Reduced MacBrickout's memory requirements from 4.5 megs
to 4.0 megs. I'm hoping to get it down to 3500K.
10-22-98
Learned how to use the List manager today. Also learned how to scan a directory for a par-
ticular type of file. With this newfound knowledge, I added an Arrange Levels dialog box
to the level editor. It displays the filenames (in a list) of all the MacBrickout 4.0 levels
in the default level folder. Made it so that when you double-click on one of the names in
the list, it draws a miniature picture of the level to the right. Got multicolor flashing
bricks working. Each time you hit the brick, it changes to a different color. The flashing
bricks were too easy to destroy when hit rapidly by a bouncing ball. Made it so a brick
has to wait until it stops flashing before it flashes again (and decrements numHits). Oh
yeah. Started out with Arrange Levels in the Tools menu, but moved it over to the SECRET
menu. Added an ability to me level converter tool to convert all the levels in a folder (so
you don't have to manually convert one at a time).
10-23-98
Somewhere along the line, the falling paddle (when the paddle gets too wide) stopped working.
Fixed that problem. Also fixed a collision problem when the paddle is very narrow. It was
falsely detecting collisions with capsules and bubbles. Added blue ball functionality.
Added level map file to level folder. This tells MacBrickout what order the levels go in.
Finished the Arrange levels functionality. You can shift levels up and down in the list and
save the list out in the level map file. MacBrickout will then read the level map file in
and play back the levels in the specified order.
10-24-98
Added the no high score alert which informs the player that they can't save a high score if
they didn't start from level 1. Added dark diagonal definition line in upper left corner of
border. Added ability to use up and down arrow keys in the Arrange Levels dialog box. Put
in a bunch of error handling code. Yuck. If an error happens, MacBrickout will display an
Alert with a text string describing the error and the actual error number. If an unrecognized
error occurs, MacBrickout will display a generic error string with the error number.
10-25-98
Got the ball speedup functionality working (when you approach the end of a level). Added
embossed outline around scores in high score dialog. Looks a lot better than just a plain
window.
10-26-98
Fixed a bug where the ball wouldn't change directions (when not hitting anything for a while)
whenever you had catch ability (paddle is green).
10-27-98
Added red ball functionality. Got rid of blue ball. It was too hard to see. Switched blue
ball functionality over to light blue ball. Drew artwork for bomb ball. Added bomb ball
functionality. There are still some issues with the bomb ball that need to be cleared up.
Figured out a hack to make the menu bar not flash when pausing and resuming DrawSprocket.
I basically patched the FillRgn() and EraseRect() routines to do nothing, then restored those
routines after making the DrawSprocket call.
10-28-98
Finished the Bomb Ball functionality. Added date to high scores. Slowed down the ball
speedup amount slightly when it hits the paddle.
10-29-98
Added bitfields to bricks so the bricks can specify which capsules can fall.
10-30-98
Changed the cCapsule::Spawn() routine to recognize the capsule bitfields. Now, it will only
spawn capsules whose bits are turned on. Changed the artwork for the down/up capsule. Now
it's black with red arrows (instead of red with black arrows). Figured out how to do animated
and transparent GIFs. Updated my web page with some new cool graphics.
11-1-98
Made MacBrickout automatically find the default level folder the first time it's started up
on a fresh machine. Made MacBrickout attempt to create its preferences file inside the
MacBrickout folder. If unsuccessful (like if MacBrickout is on a locked volume such as a CD
Rom), it creates the preferences file inside the Preferences folder. This is cool in that
MacBrickout won't clutter up the preferences folder if possible. Put menu bar "de-flashing"
hack in display.c so anytime the display context goes active or inactive, the menu bar won't
flash.
11-2-98
Dimmed the secret menu when a new game was started (instead of dimming each item of the menu).
This simplified the code a bit. Started working on the rectangle dragging and group selection
code in the level editor.
11-3-98
Got all the brick selection, grouping and dragging code working for the level editor. Whew!
Added "Select All" ability. Added delete ability -- Any selected bricks go away when you hit
the delete key.
11-4-98
Added the "Add Row" functionality. Added "Duplicate Selection" functionality. Added Brick
Attributes dialog box and most of its functionality. Right now, all attributes get applied
to every brick in a selected group. There is no way to change just the color of all the
bricks in the group without affecting which capsules they can drop or their Texture ID. I'll
need to change this. I'll probably add more checkboxes to the dialog so the user can select
which attributes they wish to be applied to the group of bricks. Made certain items of the
tools menu dim when they weren't logically usable.
11-5-98
Added checkboxes to disable certain groups of brick attributes when you have more than one
brick selected. This way, you can change the color of a group of bricks without affecting
which capsules they drop. Fixed a bug in the Level::PaintBackground() routine where it would
crash if you gave it a rectangle that was outside of the area on the screen where the background
was. Fixed a bug where the right border didn't get drawn correctly in some cases. Added
the ability to option-click a brick to complete replace all of its attributes with the
attributes of the last selected brick. Figured out a way to make the cursor stay visible
while option-dragging or shift-dragging over bricks. The brict attributes editor is now
complete and fully functional! Yay!
11-6-98
MacBrickout now gets the monitor's frame rate from DrawSprocket and adjusts the sprite's
velocities accordingly. That way, the sprites won't be lightning fast on monitors with high
refresh rates. Got the "Place Ball" functionality working. Added the ball attributes
dialog and got all of its functionality working. Made it so you can't have bricks and balls
selected at the same time. Made it so when you hit command-i (attributes), it brings up the
appropriate dialog box depending on if you have a brick or a ball selected.
11-7-98
Made the bomb ball destroy the gold bricks. Ran into a problem if you had lasers, then caught
a 3-capsule. Most likely, you already had the mouse button down because you were firing the
lasers. If the 3-capsule spawned any bomb balls, they would go off immediately and you would
feel robbed. Fixed it. Made the ball start off at a normal speed if the slow pill was
activated. Otherwise, it starts off at a slow speed until it hits the paddle.
11-8-98
Got most of the "set background pattern" functionality working. Right now, it only reads in
PICT files. I'd like it to read PICT resources too. Up until now, a brick's shadow would
disappear once you've dragged it. That is now fixed. Works when you drag a whole group of
bricks too. Added progress bar to "Set Background Pattern" when it has to calculate a dark
shadow for a very large pict.
11-9-98
Fixed a slight problem where the progress bar would overshoot by a few pixels. Got the
entire Custom-User-Select-Picture dialog box working. Now the user can choose between PICT
files and PICT resources. I needed to add the PICT resource option so people could load
backgrounds out of other level files. Made it so you can click on a filename and it will
draw a picture in the upper-right corner of the dialog box. Added Level Name dialog and
functionality. Got rid of most of the menu bar quags in the level editor. Now, for the most
part, the menu bar stays on. Fixed a problem where if you option-dragged a normal brick
onto a gold or gray brick, the gold or gray brick would keep its metalic 3D edges.
11-10-98
Rewrote the sand drawing code. It used to redraw all of the sand when any part of got obscured.
Now it just draws the portion that got uncovered. Also, I had allocated a huge 640x480 block
of RAM to hold the sand (taking 300K). Now it only takes up 20K of ram. I was able to
reduce MacBrickout's memory requirements to 3500K. Changed the Level datastructure to handle
more than one initial ball. Modified the level converter tool to output the new datastructure.
Modified level.cpp to correctly read the new format. Tested. Works ok! Got preliminary
save level functionality working. The Levl data gets saved but not the background PICT info
yet. Started working on the code that converts the background pattern in the game back into
a PICT resource for saving into a new level.
11-11-98
Finished the level save capability! Yay! Now I can start making new, exciting levels.
Added the ability to start a level off with more than one ball. Needed to make some major
changes to the datastructures to accomodate this new ability.
11-12-98
11-13-98
11-14-98 took a break.
11-15-98
11-16-98
Spent all day getting the levels to load and save multiple balls. This job is turning out to
be more complicated than I expected.
11-17-98
Got balls that don't kill bricks working again. Created a few test levels to test out some
ideas. Fixed a bunch of glitches in the level editor having to do with saving levels that
contain more than one ball. Finally got multiple balled levels loading and saving correctly.
11-18-98
Added color.cpp. Got marching ants working in level editor selection tools. Made it so you
can move a selection one pixel at a time by using the arrow keys. Made it so that passive
balls keep moving even if you've caught an active ball. Added center selection ability to
level editor.
11-19-98
Made it so the drag rectangle in the level editor stays within the walls. Changed the
dirty rect grid size (in drawsprocket) so that the menu bar doesn't get partially erased
when you drag something near the top of the screen in the level editor. Fixed a bug where if
you set a brick to drop a warp capsule in the level editor, it would drop a ball instead!
Fixed a bug where the capsules you selected in the level editor didn't corespond to the
capsules that actually fell. Fixed it so warp tunnels won't appear on top of each other.
Drew fruit capsule artwork. Drew 16 fruits and vegetables. Added fruit capsule to game.
Added fruit capsule checkbox and functionality to level editor. Added fruit menu. Made
fruit menu functional. Now you can select fruit from the menu and drag/place them anywhere.
Modified the level datastructure to handle fruit. Updated the level converter tool to handle
the new datastructure. Ran a new batch of levels.
11-20-98
Made it so the fruit gets saved out with the level. Made it so that when a level is loaded,
the fruit gets loaded, placed and displayed in the correct position. Added collision det-
ection between fruits and balls. Made fruits fall when hit. Added collision between fruits
and sand. Added collision between fruits and paddle. Added code to stamp fruit image onto
border. Added fruit capsule functionality (turns all fruits on when caught).
11-21-98
Had a nice weekend getaway in Carlsbad.
11-22-98
Made it so the fruit achievements get saved with the user. If the user ever wants to reset
their achievements, they can hold down the option key when starting a new game. Took shadows
away from the sand sprites. They look a lot better that way. Finally fixed garbage left in
score bar by commas. Added brick sizing capability in level editor (hold shift key down
while using arrow keys). Made bricks with AlwaysDrop turned on drop a capsule even if more
than one ball is on the screen.
11-23-98
Discovered a problem with the fruit. If the user plays a different level set, all of his
fruit accumulations still show up from the previous level set. Each user needs to have a
unique list of fruit for each level set. I decided to save the fruit accumulations out into
the map file of each level set. Got the fruit lists saved out in the map file of the level
set. Wrote code to automatically delete bogus fruit lists out of the map file (lists that
belong to users that don't exist on this machine). Messed around with the sand artwork
some more. Drew preliminary teleport artwork. Added teleport.cpp. Spawned a couple of
teleporters. Hmmm.... Made it so you can't command-I on a fruit in the level editor.
11-24-98
Made it so you can't pick a new default folder while a game is in progress. There is now a
MacBrickout folder in the preferences folder. I did this because there is now the possibility
of having mutiple preference files --> If MacBrickout exists on a CD rom, it is impossible
to modify the level map file contained in the level sets on the CD rom. Therefore, it is
impossible to modify the user's fruit status. So now, if MacBrickout is unable to write to
a level map file, it will create the necessary files inside the MacBrickout folder inside
the preferences folder.
11-25-98
Majorly rewrote preferences.cpp and file.c. Now MacBrickout will behave properly when launched
from a CD Rom. If launched from a hard drive, MacBrickout will create its preferences inside
the MacBrickout folder. All "Level Map" modifications take place inside the respective
level set folders. If launched from a CD ROM, the preferences and level map files exist
in the Preferences folder instead (where they can be modified). File management error handling
is annoying!
11-26-98
Thanksgiving day! Fixed a problem where beginner mode stopped working.
11-27-98
Wrote temp code to convert a 24-bit pict of the sand into an 8-bit pict of the sand w/o
losing any picture quality. This decreased the size of the MacBrickout application by about
50K. Made it so you can't log a high score if your score is zero. Fixed a bug where a level
would start out with 2 balls if you finished the previous level by exploding a bomb ball on
the very last brick. Took a bunch of code out of MacBrickout.c and created ArrangeLevels.cpp.
Made it so if you're not saving a level over itself, it brings up the ArrangeLevels dialog
box. Fixed an error -47 bug that would sometimes pop up when trying to save a level over
itself. Added the help dialog box and functionality. Added registration form dialog box
and functionality.
11-28-98
Added registration number code. Fixed a collision problem where the ball would sometimes
do a 180 when it hit the top of 2 horizontally adjacent bricks. Fixed a bug where the
angle deviation of the ball wasn't working. Fixed a problem where the shadows of adjacent
bricks would interfere with flashing bricks causing distracting little graphic glitches to
appear.
11-30-98
Made it so that only certain capsules and balls are available in the unregistered version.
Took pearl ball out of the lineup since it's going to be a very special ball.
12-1-98
Elizabeth said that I shouldn't have the same old laser that 3.0 had. She convinced me that
people need a new, improved laser. So.... I spent all day making a new laser paddle. Got
new laser paddle artwork and functionality into the game. Getting quad laser balls is
pretty cool but it's almost too easy. Since quad lasers allow you to blast through a level
pretty quickly, I'm going to need to think of a way to make that ability harder to get...
The level editor would leave a little garbage on the screen left over from creating the shadow
background PICT. Fixed it.
12-2-98
Added teleporters to level editor. Still need to add the ability to set links. Made it so
teleporters get saved out in levels. Made the game read the teleporters out of the levels
and display them on the screen.
12-3-98
Made it so the user can copy text out of the help dialog to the clipBoard. I enabled auto-
scrolling so the user can click and drag to select a whole bunch of text. The problem is,
it wouldn't update the scroll bar. I couldn't find anything in the textEdit record that
would tell me where the text had scrolled to. As a result, I had no idea where to position
the scroll bar after the user selected a large block of text. It looks like I need to write
a custom clickLoop routine to scroll the text and update the scroll bar. For now, I'll just
disable automatic scrolling.
12-4-98
Made it so the game counter only shows up in the registered version. Got teleporters totally
working. That includes the attributes dialog box in the level editor. You can set which
teleporter each teleporter warps to. You can also set the angle the object will travel once
it leaves the teleporter. Got random teleporters working. Added smoke.cpp. Since I don't
have smoke artwork yet, I decided to use the bomb-ball explode artwork. As a test, I made
the ball eminate 10 smoke clouds (bomb ball explosions) after hitting the paddle. VERY COOL!
Made teleporter (with random setting) not warp to itself. It was looking like the collision
detection wasn't working but really the teleporter was just warping to itself. You can now
specify a random angle for the teleporter. Basically, any angle > 359 is random. Had to add
another custom dialog filter to monitor the angle input from the keyboard so the "Random"
message can appear and disappear at the appropriate times.
12-5-98
Drew new artwork for teleporters (brown ring with colorful sparklies inside). Messed around
with the mouse acceleration tables again because the paddle just didn't "feel" right. I
think I got it dialed in this time.
12-6-98
Fixed a bug where the ball attribute, "Collision-on-but-don't-kill-bricks", wasn't working.
Made it so lasers can go through the teleporters. Made it so fruit explode if you hit them
with the lasers. I'm getting concerned. I'm starting to see the frame rate chunder when a
lot of objects get on the screen. Especially rotating objects. I'll probably need to speed
up my bilinear texture interpolation routine at some point. Ick. Drew smoke artwork and
added smoke functionality to teleporters. Looks cool!
12-7-98
Made the sprite cutter tool optimize out duplicate frames. This cut about 6K out of the
data size. Fixed a problem where the color picker dialog in the level editor was modifying
the ctSeed field of the front graphics buffer. This would cause subsequent calls to
CopyBits() to be VERY slow. Fixed a problem where MacBrickout wouldn't acknoledge new level
files dropped into the default level folder by the user. Made teleporters work on passive
balls. I investigated having textured bricks but I think I'm going to kill that idea. I
think the look of textured bricks on a textured background would be too distracting. Also,
it poses a memory issue because I would have to keep all of those textures in RAM at runtime.
Made it so fruit can pass through teleporters. Made it so capsules can pass through the
teleporters. I think I'm going to make the bubbles immune to the teleporters (they're so
light, the teleporters can't detect their presence).
12-8-98
Decided to change the way the high scores were stored. Originally, there was only one high
score resource and I displayed the level group along with the score in the high score dialog.
I changed it so that there is now a separate high score resource for each level group. That
way, a user can see his top 10 scores on "3.0 Levels", and then switch to "Standard Levels"
and see his top 10 scores there. It just made more sense to store the scores this way. Got
quad laser functionality working. Drew 500 bonus artwork. Added 500 point bonus for
catching fruit. Made the smoke engine handle the 500 bonus artwork.

LONG BREAK!

1-28-99
After a long (much needed) break, I decided to get back into programming mode. I'm going to
hold off on the sprite blitter optimizations for now.
1-31-99
Made it so the original level gets redrawn when you cancel out of the level editor. Added
caged ball functionality. You draw a box around the ball in the level editor. If the ball
ever leaves that box, it becomes an active ball (collision is turned on). Added time delay
when you lose a ball so caged ball has time to break free.
2-2-99
Fixed a bug where the menu bar would disappear when you switched to another application and
then back to MacBrickout.
2-3-99
Fixed the rest of the menu bar glitches when you switched to another application and
then back to MacBrickout. Tossed around a few ideas for level 1. It's important that this
level be visually appealing since it's the one level that everybody who plays MacBrickout is
guaranteed to see.
2-7-99
Got rid of only being able to select one sprite at a time in the level editor. Now you can
drag a whole group of objects (sprites, bricks, whatever). Kind of opened up a can of worms.
Now I need to modify the Ball Attributes and Teleporter Attributes dialog boxes so that the
user can select which attributes to apply to the whole group (if more than one object is
selected). Added checkboxes to ball attributes dialog box. Added functionality to check-
boxes.
2-9-99
Added a scroll bar to the comments field of the registration form. It's still very glitchy.
Posted a help question on the Mac Games Dev mailing list. Waiting for a reply...
2-10-99
Started working on musical bricks. Redesigned the brick attributes dialog box to accomodate
the musical bricks.
2-11-99
Learned about the Code Fragment Manager. Using CFM, I made MacBrickout display a friendlier
message when someone tries to run it without DrawSprocketLib. I got LeapfrogSW.com today!
Yay! I moved my web page over there and created a simple "I've moved" web page for the old
AOL location. Added the "show musical bricks" menu item to the tools menu. Doesn't work
yet. Added "Gold" and "Gray" buttons to the brick attributes dialog box. Added functionality
to "Gold" button.
2-14-99
Added new "About MacBrickout" picture. Got "Show Musical Bricks" functionality working in
the level editor.
2-15-99
Added prizes for musical bricks in brick attributes dialog box. Added fields to the brick
datastructure to accomodate the prizes. Reconverted the original 3.0 levels. Stored the
appropriate data in the coresponding bricks when the user makes selections from the prize
popup menus. Made the musical bricks spawn the various prizes you pick in the level editor.
At game over, you'd see the level you finished with but if you selected "Edit" from the
secret menu, you'd always end up editing level 1. Fixed it.
2-16-99
Sampled and added ARGH1, ARGH2, FRUITHIT, HS1, HS2, HITSAND, JUGGLIN2, TELEPORTER, THUH,
UMPHEE, CATCHFRUIT and UNUPDOWN sounds. Made warp tunnels play ARGH sounds when you miss
them.
2-17-99
Started designing how I'm going to implement bonus levels. The original MacBrickout's bonus
levels were hard coded. This made it impossible for the user to create their own bonus
levels. I would like MacBrickout 4.0 to posess the ability to create bonus levels from the
level editor. I will probably add another menu to the menu bar which contains special bonus
level tools. Some of the new sounds were too quiet so I amplified them a tad. Made the
ARGH sound play 1/4 second after the ball leaves the warp tunnel (to allow for human brain
processing). Now the sound plays right about the time you want to say "Argh!" Started to
change the "Jump to level" dialog box to contain a popup menu with a list of the levels.
This will be easier than having the user type in a level number (when there is no easy way
to tell what number coresponds to which level). I need to figure out how I'm going to store
the bonus levels though, before I can revamp the jump-to-level dialog box. I feel I'm
getting ready to open a BIG can of worms...
2-18-99
Accidentally stumbled across a bug in the preferences code where it would sometimes fail
to create a preferences file in the system folder. It was because I had a dirID assigned to
a tS16 instead of a tS32. When the level map file exists on a locked volume (like a CD rom),
MacBrickout has to create one in the preferences folder. Modified file.c so that it would
copy the entire file from the CD rom to the preferences folder (instead of copying individual
resources. It was getting tedious to modify the code every time I added a resource). Made
it so that if a ball missed a warp tunnel, then a split second later it went in, the ARGH
sound wouldn't play from the first collision. OK. Bonus levels are differentiated by a
filetype of 'BLEV'. Modified the ArrangeLevels dialog box to include a "show bonus levels"
checkbox. Modified tons of code that dealt with the level map file. The code now stores
bonus levels in a different 'Map ' resource. Made the ArrangeLevels dialog box generate a
fresh list of the appropriate levels when you click on the checkbox. Added "Bonus Level"
menuItem to the Tools menu.
2-19-99
Cancel button in Arrange Levels dialog box didn't really cancel. The problem was when you
switched from main levels to bonus levels, it would save your main level arrangement. I now
maintain two seperate lists and don't save either of them unless you hit the OK button.
Whew! Got the Jump-to-level dialog box entirely working. Made it so that if you start from
a bonus level, the game ends as soon as you complete the level. Added the happy capsule
graphic. Added happy capsule functionality to level editor (brick attributes dialog box).
Added bonus level functionality --> Can't lose balls in bonus levels. Need to resume normal
levels once bonus tries is depleted. Etc. Made bonus capsules fall from paddle when you
lose your ball on a normal level. Added Bonus Menu. Made Bonus Menu appear and disappear
when you select or deselect the "Bonus Level" menu item. Found and fixed a bug where a level
map file wouldn't get created if you saved a level into a brand new directory. Made it so
"Bonus Level" gets checked in the tools menu and the bonus menu appears when you edit a bonus
level. Made it so that if a screen saver kicks in while the arrange levels dialog box is
being displayed, the correct level picture will be drawn when the screen saver goes away.
Made different juggling music play when your juggle count gets to 40. Also, the score goes
up by 100 instead of 50.
2-21-99
Added Ahhhhh sound. Fixed a bug in the capsule spawning code that would sometimes spawn a
capsule with an illegal animList. Fixed a bug where the correct picture wouldn't get drawn
in the Arrange Levels dialog box after you moved the levels around. Made it so when you
duplicate a brick group, the newly formed bricks won't materialize out of bounds.
2=22=99
Decided that floats (although quite accurate) were too slow when trying to convert back and
forth between them and integers. Changed the whole project over to using 16.16 fixed numbers.
Got almost everything working again -- brick collisions are still hosed. Big yawn. I'm
seeing doubbllee. 3:00am. G'nite!
2-23-99
Fixed the brick collisions. Found and fixed numerous small bugs relating to the switchover
from floating point to fixed point. Did some profiles. I got a significant speed increase
in my code performance! Yay! Found and fixed a bug where MacBrickout was causing other
applications in the background to crash with bus errors. It turned out to be a bogus address
calculation for the brick shadows that crawl up the right side of the screen. I had one too
many INTtoFIXED() macros in there. The capsule prize popup menu stopped working in the brick
attributes dialog box. Fixed it by not loading that menu up at MenuInit time. Weird.
Dialog popup menus are weird.
2-24-99
Oops. Missed a Fixed point conversion. Growing paddle didn't fall to sand. Fixed.
Extended the level datastructure to hold the new bonus level flags / attributes. Added
No Bubbles functionality to BONUS menu. Added Full Paddle Range functionality to the BONUS
menu.
2-25-99
Added Can't-touch-walls bonus level and level editing functionality. Added time limit
functionality to level editor and bonus levels.
2-26-99
Added "add-5-to-timer" functionality. Making the checkbox appear at the right time in the
brick attributes dialog box was tricky! Took the "Edit..." text out of the SECRET menu.
Added an Edit... button to the jump to level dialog box.
2-27-99
Did electronic repairs all day.
2-28-99
Fixed a bug where a new ball would start off much slower than the ball you just lost. Made
it so the can't save high score message (when you've jumped to a level) only gets displayed
if your score could have been entered on the list. Made the HighScore2 music only play if
HighScore1 music played first. Fixed a bug where if the paddle touched a light blue ball
that was lodged in the sand, it would switch to dropping 6 capsules instead of 3 capsules.
It should only drop 6 capsules if the light blue ball is in play. Made bomb ball explode
even when it's lodged in the sand. Got an idea to make a black singe mark in the sand after
the bomb ball explodes...
3-1-99
Added fixed vertical positioning to paddle for certain bonus levels. Made it so respawned
warp tunnels won't keep reappearing level to level. They only get respawned once. This was
to keep someone with catch and a low (in reach) warp tunnel from warping straight through the
game all the way to the ending. Made bomb balls kick up a bunch of sand when they're lodged
in the sand and you blow them up.
3-2-99
Learned how to use Navigation Services. Implemented Navigation Services for MacBrickout's
"Select Default Folder" option. If Navigation Services isn't available, MacBrickout uses
StandardGetFile() instead. Got Nav Services working for the "Save Level" portion of the
game. Ran into a problem where the game crashes (yikes! A crash bug!) when you try to save
a level over itself. The crash doesn't happen until after the save has long been completed
and an updateEvent occurs. I believe NavServices caused memory to get moved around and
there's probably some code somewhere else that's assuming that memory hasn't changed.
Changed "Jump to Level..." (in the SECRET menu) to "Level..." since that dialog box now has
an Edit button in it.
3-3-99
Fixed a bug where saving a level over itself would crash the game. Saving a level causes
the tools menu to disappear. I was calling a routine after saving a level that modified
menuItems in the tools menu w/o checking if the tools menu was even there. Duooh! Made it
so teleporters could warp to themselves (unless you've selected "warp to random"). That way
you can put one teleporter on the screen and have it warp to itself to change the ball
direction. Spent the rest of the night trying to figure out how to draw a custom preview
in a Navigation Services dialog box. They sure don't make it easy!
3-4-99
Got preview working in Navigation Services. That was rather challenging! If there's not
enough memory to display a picture in the preview, I made it display a short message in the
preview box stating that problem. Fixed a bug where if the paddle touched a lodged ball,
it would reset the multiplier. Not good :( Fixed a bug where a caught ball wouldn't
remain stuck to the paddle when resuming a paused game. Made the sand the the bomb balls
kick up when they explode spray out randomly instead of uniformly. Looks a lot cooler!
3-5-99
Put Awesome Bounce detector in.
3-6-99
Put in bubbleGum ball functionality. This included drawing the artwork and sampling 2 new
sounds. Made it so the same pink ball can re-generate bubbles after you've caught a
3-capsule. Fixed a bug where a red ball would override an "always drop" capsule spec-
ification -- so you'd get a red x capsule instead of some important capsule you may have
needed to help complete the level.
3-7-99
Got preliminary must-hit-ball and must-avoid-ball bonus level functionality in.
3-8-99
Spent a week in Nashville, troubleshooting and repairing hum problems in a recording studio.
3-15-99
Since I'm no longer supporting textured bricks, I got rid of the "Texture" specification in
the brick attributes dialog box. Made it so you can't save a level that has no balls.
Repaired an intToFixed glitch in the AddBall() routine.
3-16-99
Fixed a bug where the bonus level countdown timer starts counting when you hit a newly placed
brick on a normal level. Fixed a bug where sizing a brick smaller would leave garbage on
the screen. Made it so that the ball starts off really slow while the AlphaLetters are on
the screen, then it speeds up to normal speed. That way, it makes it easier for a person to
position the paddle when resuming a paused game. I kind of don't like that the ball starts
off slowly at the beginning of a level. I think it should remain perfectly still until the
AlphaLetters are done. I may make additional mods to rectify this...
3-17-99
Got multiple monitor support working. Ran into a problem where some sprite velocities and
animations went way too fast because they were tied to the monitor refresh rate. I need to
convert some of the modules to account for the screen refresh rate... Converted alpha.cpp,
sand.cpp, bubbles.cpp, paddle.cpp, smoke.cpp, umphees.cpp, sprite Manager.c. Fixed some bugs
with the starting ball speed.
3-18-99
Fixed a bug where the ports were getting unbalanced (GDevice was saved but not restored) when
calling AddScore() after going through a warp tunnel. Made it so the screen only scrolls on
the main monitor (the one with the menu bar) when the user pauses a game. Fixed a bug where
the game would sometimes calculate an invalid monitor frequency. I just needed to put a
Pause(10) before calling the DrawSprocket routine to calculate the monitor refresh rate.
Made it so ball is frozen at the beginning of a level but moves slowly the instant after you
resume a paused game. Added CATCHFRUIT sound (I need to rename that sound) to bubblegum
ball when you hit all 5 bubbles. Made shadows work correctly when sprites land on the sand.
Increased amount of ball velocity change when you catch a fast or slow capsule from 1.0 to
1.5.
3-19-99
Made some changes to EventLoop() and DoUpdate() to keep DrawSprocket from filling a part of
the game screen with the background color (when a dialog disappears) causing an annoying flash.
This may cause multiple monitor problems (like an area on the unused monitor not to get
filled in). Will need to test. Started working on the brick layers. Added layer elements
to the brick attributes dialog. Added "Show Layer" to the tools menu. Programmed layer
functionality (you can select a brick, set its layer, save a level, load the level back, and
the correct layer still shows up in the brick attributes dialog). now I need to get it to
only show the selected layer... Ok. Got all layer functionality working! Whew! There is
a small bug regarding leaving garbage on gray bricks. I'm too tired. I'll fix it tomorrow.
3-20-99
Found the problem with the garbage. Draw3DBrick() doesn't know how to draw just a portion of
a 3D brick so when I was passing in a small rectangle (representing just the section of the
3D brick I want to draw), it was treating that as "draw an entire 3D brick whose size is
represented by rectangle, r". I temporarily fixed it by passing in the entire brick rect for
3D bricks. This will normally work fine but will cause some cosmetic glitches if other bricks
are layered over 3D bricks. Made Umphee run fast when hit with the ball. Drew artwork for
curled up umphee. Made umphee start off as a ball, then uncurl and walk in the sand. Added
COMMAND functionality to sprite.cpp. Now you can specify a command in the sprite cutter for
a particular frame of a sprite. When the sprite manager comes across that command, it
calls sprite->DoCommand(). Right now, only the umphee class uses commands. I give the
command to start walking on the last frame of uncurling. Made umphee curl up if a capsule
falls on it. After a certain amount of time, it straightens out and starts walking again.
Got the idea for an umphee-ball. I realized that a black umphee would be hard to see so I
redrew it in green. Also gave it some hilites for a more 3D look. Got umphee-ball func-
tionality working. Drew artwork for umphee ball (2 frames of animation). Made umphee-ball
stop animating when caught. Made it so the umphee would sometimes appear at the beginning
of a level. Sometimes he doesn't appear.
3-21-99
Fixed a bug where a musical brick prize ball would appear in the wrong place. Added bonus.cpp
module. It takes care of displaying the bonus points that float up on the screen. Changed
the bonus artwork from boring gray to yellow. Made the numbers slowly drift appart as they
rise. Took old bonus code out of the smoke.cpp module. Drew sparkle artwork. Added
sparkle.cpp module. Added clean sand bonus. Added umphee spaz out code. While the umphee
was spazzing out, the sound bug I've had for the past year (where it would start playing the
entire contents of the computer's memory) exhibited itself. Took another long hard look at
sound.cpp and found (AND FIXED) where the bug was happening. Yay!
3-22-99
Drew artwork for Super Laser Capsule, Super UpDown capsule and 10 capsule. Added ALL and
NONE buttons to brick attributes dialog. Added new capsules to brick attributes dialog.
Implemented ALL and NONE button functionality. Added super laser capsule functionality.
Redesigned the way the special capsules are picked. I can now assign the capsules to groups,
giving the groups appearance priorities rather than giving each capsule a priority. This
allows me to group multiple capsules together and give each capsule within a group an equal
chance of being picked. As an example, group 3 contains the Warp capsule, ten-capsule and
super laser capsule. If group 3 gets picked, you'll have an equal chance of getting one of
those 3 capsules. If you check the Always Drop checkbox and have selected both normal cap-
sules and special capsules, there is now a 50/50 chance of picking from either type. Before,
it would pick from the list of normal capsules most of the time. Made umphee balls not get
deflected by bubbles. Made umphee curl up into a ball when you hit it with the paddle.
Added ability to Cue a sound to play at a later time (used when catching super capsules).
3-23-99
Drew some gems. When saving the registration form, it will now use NavServices if available.
3-24-99
Fixed a bug where the musical brick number wouldn't get shown on 3D bricks. Made a couple
of levels. Drew some new backgrounds. Fixed a bunch of minor bugs I discovered while
creating new levels.
3-25-99
Worked on the design of the phase 1 copy protection.
3-26-99
Implemented my phase 1 copy protection design. Made game counter only appear in the registered
version.
3-28-99
Made it so in an animList, the COMMAND_COMMAND gets executed before the frame. The other
things like JUMP, LOOP and HOLD get exectued after the frame. Made the pink bubbles drift
downward after they popped (using a COMMAND_COMMAND).
3-29-99
Made musical brick prizes reset to OFF when you turn the music number off. Added artwork for
trigger switches (4 directions). Added trigger switch editing functionality to level editor.
Wrote code to save trigger switches out with the level when you save a level. Made trigger
switches turn on and off when you hit them. Drew gate artwork. Added gate.cpp. Added gate
level editing functionality. Added gate attributes dialog box. Started writing collision
code to handle gates. Realized that I could use the already existing brick collision code.
Made the gates generate an invisible brick that's the same size as the gate. The ball now
collides with this invisible brick. This is way cool because it now uses the brick manager's
optimal collision detector where a collision isn't even tested if the ball isn't in the
vicinity of the gate. GATES AND TRIGGER SWITCHES ARE NOW TOTALLY FUNCTIONAL! 1:30am. YIKES!
3-30-99
Made it so you can only select and hilite bricks that are in the currently selected layer.
Before you could show layer 2 but still be able to grab bricks from other layers which made
it really confusing. Repaired some old code where objects would sink into the sand at
different speeds depending on how fast the monitor refresh rate was. Added ability to blow
up gates with the bomb ball. Made trigger switches activate when hit by a laser. Made gates
automatically open after a certain amount of time if a ball gets stuck behind them and has
no way to get back out. Sampled and added trigger switch on and off sounds. Added gate
opening and closing sounds. Added "somthing special" sound.
3-31-99
Prepared and sent off Apple Game Sprockets license application. Got 2-player mode imple-
mented and totally working. That was an all-day task!
4-1-99
Found and fixed a few residual bugs with the 2-player mode code. Started working on the
save game feature.
4-2-99
Added LoadSave.cpp.
4-4-99
Fixed a bug where the bricks didn't get saved out properly when saving a level in the level
editor. Got save functions working for bricks, balls, paddle, capsules, umphees.
4-5-99
Got a moving teleporter idea. Started working on that.
4-6-99
Got moving teleporters working. This opens up new possibilities to the game! Modified
teleporter attributes to handle moving teleporters (in level editor). Setting the end point
is not very user friendly. I need to finish this project! I will make it more user friendly
if I have time.
4-7-99
Added teleporters to save game function. Added warp tunnels, trigger switches, gates, fruit,
Added fruitAppear sound. Added smoke when fruit appears. Started working on the bubble
capturing umphee code.
4-8-99
Finalized bubble capturing umphee code. Found and fixed a few save game bugs. Clean sand
status wasn't getting saved.
4-9-99
Drew a bunch of fruit (From watermelon to pear). Drew a bunch of gems.
4-10-99
Added new fruit to game. Made it so each fruit is spaced 2 pixels from its neighbor on the
border. Added the dialog box that comes up when you complete a bonus level. Added code to
stamp a sprite into the dialog box.
4-11-99
Got bonus icons totally working. You accumulate them during gameplay and they get saved
when you get a high score. When viewing high scores, the correct bonus icons get displayed
in the high score dialog for each person. Fixed a bug where resuming a paused game would make
the invisible fruit appear!
4-12-99
Fixed a bug where option-dragging gold bricks wouldn't make the destination bricks gold. Also
fixed a bug where all gates would open prematurely if any ball had to change direction more
than once. Now the gates only open if there's just one active ball on the screen that has
to change direction twice.
4-13-99
Argh. Didn't entirely fix the option-dragging brick problem from yesterday. For some reason,
I had 2 variables that essentially did the same thing but they were getting out of sync with
each other. I simplified the code and removed one of the variables. Problem solved! Got
last level detection implemented. Put "end" and "win" in high score dialog. Added 5 more
fruits. Now the "add fruit" popup menu in the level editor is so long it runs off the top
of the screen. There seems to be a clash between the menu manager and DrawSprocket because
things really get screwy with that menu. I decided the easiest way to solve the problem
is to break the "fruits" out into two categories: Fruits and Vegetables. Added the "add
vegetable" option to the tools menu. Modified all the code to handle fruits and vegetables
separately. Ahhh, much better! I noticed sometimes the mouse acceleration was all off.
Apparently sometimes more than one cursorDevice shows up in the cursorDevice list even though
I only have one mouse hooked up to the computer. Hmmm. Modified the code to change the
acceleration tables of all devices in the cursorDevice list. It keeps track of each device's
original acceleration table and restores it when the game gives the cursor back to the user.
Whew! almost 2:00 am.
4-14-99
Fixed a bug where the umphee would slide along the sand as a ball after a capsule fell on
him. Typed up the instructions for the level editor in HTML.
4-15-99
Changed the number of possible brick layers from 5 to 9. Designed a couple of levels. Got
fed up with flat shaded bricks. Started designing the texture manager.
4-16-99
Worked all day on the texture manager. Figured out the datastructures I'll need.
4-17-99
Added texture manager dialog box. Added Texture.cpp. Added almost all dialog box functionality
(everything except "Add from other level" and "Remove"). Modified brick datastructure to
handle textures. Added "DrawTextured()" to bricks.cpp. Made changes to brick attributes
dialog box to handle textures. Whew! An all day job but I finally got textured bricks on
the screen. They're fully editable in the level editor! The texture manager is awesome!
Fixed a bug in the level editor where a sprite would sometimes not get unselected when you
click on a brick that's not already selected. Got "Remove" functionality working in the
texture manager. Tested multiple-hit textured bricks. Works fine! Yippy! 15 hours of
coding. Ick! G'nite!
4-18-99
Fixed a bug where the texture offsets for invisible bricks weren't getting initialized to
NO_TEXTURE.
4-19-99
Did repairs all day.
4-20-99
Fixed a bunch of memory leaks. Optimized the sprite drawing routines. Draw() came down to
61uS from 102uS and DrawShadow() went from 61uS to 44uS.
4-21-99
Spent most of the day squashing memory leaks. Sent some e-mails to Apple regarding carbon
dating MacBrickout. The carbon dater won't work. Emailing to carbon@apple.com returns an
automated message that says send any problems with the carbon dater to carbondater@apple.com.
I send an e-mail there and it bounces back with an unknown user error message. Argh!
Added a temporary security feature in the beta version. Decided to convert the entire
project to run in thousands of colors. This involved updating the blitters, sprite cutter
tool, texture manager and trashing the font cutter. I decided to just make the font
characters (which are used in the score bar) out of sprites which means, I now just use one
tool for all images in the game. Redrew some of the artwork to take advantage of the
multitude of colors now available.
4-22-99
Added the treasure chest module to the game. Modified the screen shift routines to go faster.
They slowed down when I converted to thousands of colors. Made the sand antialias to the
background. Scanned a better picture for the about box. The previous one was tailored for
the apple 256 color palette and it was very grainy.
4-23-99
Made font antialias against any background. This required modifying the font artwork to
antialias to various grays. In the game, the amount of gray determines how much of the
background to let through. Wrote a 2D texture mapper that squashes textures to give an
appearance of 3D perspective. Added textured borders! Right now, the textures are hard
coded. Need to add a border editing panel in the level editor...
4-24-99
Added some code to time the intervals between vertical blank interrupts. An attempt to find
out why the sprites jitter on some machines (machines that are faster than my 7100 and
shouldn't have any problems rendering sprites). Well, I went over to my friend's house to
debug the jittering problem. We both looked at the same monitor. He saw the problem but
I did not. Very weird. It turns out that his persistance of vision is faster than everyone
else's. He was able to see tripple images of the sprites while it looked as smooth as glass
to me and everyone else. Hmmmm... So. No bug.
4-25-99
Started adding the border texture editing panel. Panel functionality implemented. Border
texture data loading and saving implemented. Textured borders are done! Long day!
4-26-99
I just realized that sizing bricks with the arrow keys was all wrong. Fixed it. Now shift-
down arrow and shift-right arrow expand the size of the selection. Shift-up arrow and shift-
left arrow decrease the size of the selection. Ahh. Works much better now. Made end point
on teleporter default to start point when you place a new teleporter. That way, it'll start
out stationary. Cleaned up bomb ball and umphee ball sprites. They had sparkles which
looked bad. Cut a new treasure chest sprite. Looks MUCH better. The old animation was
jumping all over the place. Made it so you can option-click a color in the border attributes
dialog box to replace it with the most recently selected color. Fixed a bug where the
textured bricks would be missing (just their shadows would show) when you resumed a saved
game. It turned out I forgot to load the textures when resuming a saved game. Duh.
4-27-99
Added code to allow umphee to dig into the sand and come back out. Drew coin artwork.
Added coin.cpp. Added code to trigger umphee dive sequence. Added "copy to clipboard"
functionality to registration dialog.
4-28-99
Made it so ending a level with an umphee ball guarantees an umphee on the next non-bonus
level. Fixed a problem where if all of the ball sprites were allocated, a new ball wouldn't
appear if you lost a ball. In other words, if you caught a bunch of 6 capsules and had a
bunch of balls sitting in the sand, then lost your ball, the level would just sit there and
you couldn't proceed. Fixed it by checking to see if any balls are in the sand. If so,
it robs one from the sand and places it at the top of the screen.

5-7-99
Redrew the gold coins. They look better now.
5-8-99
Ran into some frame rate issues. Time to optimize! Made the Score and Mult get updated only
once per frame (if they changed). Before, they would update every time they changed which
could have happened multiple times per frame if there were a lot of balls on the screen.

5-14-99
Fixed a bug where pieces of bricks would get overwritten with the border when they overlapped
the border and neighboring bricks disappeared. Drew side chambers level. Drew over the top
level. Added ability for bricks to play different sounds when they disappear. This required
mods to the brick engine and the level editor. Fixed a bug that was tripping an ASSERT when
you placed a new brick. The textureOffset field of the brick wasn't getting initialized.
5-19-99
Added Tilt, Chairs and Welcome levels. Fixed a bug where the game would trip an ASSERT when
the ball tried to warp through a teleporter whose destination was a random teleporter.
5-21-99
Added clam shell artwork. Added shell.cpp. Made it so shell and treasure chest can't appear
on top of one another. Made shell open when hit with a ball.
5-27-99
Kirk gave me his 3D texture mapper code (which was derived from Chris Hecker's 3D perspective
correct texture mapping code in Game Developer Magazine circa 1995). Kirk's version was
highly optimized and could render 6 million pixels per second. Removed the z-buffering
feature.
5-28-99
Removed the z axis. Now it's essentially a 2D texture mapper. Removed the luminance handling
code (since MacBrickout's textures will always be the same brightness). Optimized a lot of
the code. Looked at what would be needed to incorporate this mapper into MacBrickout. Yuck!
The object datastructure would have to be completely revamped to handle triangles. Collision
detection would have to be rewritten. I decided to just keep the texture mapper I have now
and just optimize it as best as I can.
5-29-99
Doubled the speed of Sprite::Draw() and Sprite::DrawShadow(). I did this by disassembling
the code and moving C instructions around so there would be no pipeline stalls. Also, instead
of having 4 different blitters in one routine (normal, rotated, clipping and clipping against
sand), I broke them out into separate subroutines. You would think the added subroutine
call would slow things down but it actually sped things up. Maybe the compiler was better
able to assign the registers with less code to consider at a time. Or maybe the cache isn't
getting blown this way. I dunno. 3:21am. Gotta get some sleep.
6-1-99
Finally found the source of the frame rate slowdown. It was an interrupt routine generated
by my sound code that took 2ms every time it got called. I need to rewrite the sound code
to do the sound mixing outside of the interrupt.
6-4-99
Made it so bricks in different layers don't get drawn in the wrong order when option dragging
over them in the level editor. Fixed a bug where sometimes a ball wouldn't free itself from
the sand when you exploded a bomb ball resulting in the BALL counter counting down and the
user getting frustrated.
6-6-99
Posted beta web page. Released Beta-1! Pointed one of the beta testers to that page so he could
start testing.
6-7-99
Shot some wood textures and imported them into the game (chairs level). Added wood sound
to game. Elizabeth thinks I should try again with the sound. Will sample another sound
tomorrow.... Made some minor changes to the level editor doc. Added unhappy capsule
artwork. Added bomb ball capsule artwork. Made happy capsule turn unhappy when it hits
the sand. Made unhappy capsule spawn 4 red X capsules at 1-second intervals.
6-8-99
Added CHEST_OPEN and CHEST_CLOSE sound effects. Made it so when you hit the GOLD or GRAY
button in the brick attributes dialog box 3 things happen: All capsules are turned off, the
numHits field gets updated with the correct value and the sound gets set to Metalic. Sampled
new wood sounds. They were approved by Elizabeth! Yay! Made it so when you select a sound
from the brick attributes dialog box, the sound plays. Changed bomb ball capsule artwork.
Now it's tan with a blue "B". Made changes to the level editor (Brick attributes dlog), to
account for the new bomb ball capsule. It can now fall from bricks. Need to program its
functionality tomorrow. Made the clam shell appear after catching 2 clear capsules in a row
in the same level.
6-9-99
Changed bomb ball capsule into radiation capsule. Drew radiation ball artwork. Imported new
artwork into game. Programmed radiation capsule functionality. Programmed radio active ball
functionality. Need to add radiation sound effects. Fixed a bug in the sprite cutter where
occasionally one frame of animation of 1 arbitrary sprite was hosed. Turned out to be a
pointer that was no longer valid after resizing a handle. Sampled RADIATION_ARMED and
RADIATION_RELEASE sound effects. They came out really cool! Almost midnight. My eyelids
are interrupting my vision!
6-10-99
Made it so radio-active balls can't go through gold bricks. This prevents a user from
radiating a ball into a hollow gold square (or similar structure) and then not being able
to get back out. Added Rock sounds. Identified a bug where ball would suddenly change
directions after hitting the paddle. Haven't fixed it yet though... Fixed a bug where
sometimes a capsule's shadow wouldn't get turned off when it landed in the sand. Fixed the
ball sudden direction change bug. Created "Rocks" level. Don't know if I'm going to keep
these rock sounds. I might sample some new ones. I need to add another sound menu to the
brick attributes dialog box. One for multi-hit bricks and one for disappearing bricks.
6-11-99
Added multi hit sound menu in the brick attributes dialog box. Now you can select which
sound a brick makes when it disappears and which sound it makes when it gets hit but doesn't
disappear. Fixed a bug where "Beginner" and "2-player mode" menu items wouldn't be checked
when you resumed a saved beginner or 2-player game.
6-12-99
6-13-99
Weekend. Didn't do any programming.
6-14-99
Fixed a bug where a radioactive ball would get stuck on gold bricks and the game would hang.
6-15-99
Made it so if you pop an umphee bubble with the paddle, you get 223 points. Fixed a bug
where if the last capsule caught on a level was clear, you only needed to catch one clear
on the next level to make the clam shell appear. Released 4.0ß1.
6-16-99
Made it so if your monitor is capable of 1024x768 mode, you can display a small 640x480 game
screen centered on a 1024x768 display. Had to add some GlobalToLocal stuff in the level
editor to handle the different display configuration. Made it so you select the alternate
display config by holding option when you start up the game. Made it save the configuration
state in the preferences so you don't have to keep holding option each time you start up
MacBrickout. If you do hold down option each time you start up MacBrickout, it'll toggle
between 1024x768 mode and 640x480 (full screen) mode. Made the game not scroll when you
pause and resume when in 1024x768 mode.
6-17-99
The spacing in the score bar text was a little off. Fixed it. Tuned up Adam's HourGlass
level.
6-18-99
Added radioactive capsule to capsule prizes menu in brick attributes dialog. Added musical
bricks to level 1 with a radioactive capsule prize. Made the shadow darker on the right
border. Looks much better. Fixed a bug where a ball's shadow was positioned incorrectly after
it was freed from the sand. Darkened the clam shell. Changed the brick colors and background
texture of level 2 (triggers). Added fruit and musical bricks to "Over the Top" level.
6-19-99
Fixed a bug where unregistered version would drop special capsules if alwaysDrop was set.
Disabled musical bricks in unregistered version. Made MULT count up by a maximum of 6.
Added fruits to more levels.
6-20-99
Added "Retro" level.
6-21-99
Tuned up some levels. Added "bombs away" bonus level. Got some ideas for some more bonus
levels.
6-22-99
Changed name of "bombs away" level to "red, then blue". Added "Be Happy" bonus level. This
level turned out really cool! Disabled 25000 red-x bonus when catching happy capsules in
bonus levels. Needed that for the "Be Happy" bonus level.
6-23-99
Changed the trigger switch so that it's green in the "on" position. Some beta testers
complained that it was too hard to differentiate between on and off. Increased the
probability of the bonus capsule falling. I plan on having more bonus levels and I plan on
the levels themselves being more challenging so the user needs more chances to get to bonus
levels.
6-25-99
Released ß2. Added radioactive ball to ball prizes menu in brick attributes dialog. Created
RadioActive level. Added ability to have trigger switches always stay on once you turn them
on.
6-26-99
Fixed a bug where the radioactive ball would get stuck on gray bricks. Increased the clean
sand bonus from numBricks * 10 to numBricks * 20. Tuned up RadioActive level. Made it level
2. Made it so you get to keep your bonus capsules if you lose a ball.
6-27-99
Fixed a cosmetic bug where sometimes there would be a small space between the ball and the
paddle when you caught a ball.
6-28-99
Added "Apply Texture From Bkg..." item to tools menu. Made it only be enabled when just
bricks are selected. Added its functionality. You can select a whole group of bricks and
apply a large texture to that whole group. Made "Dino Trouble" level. MacBrickout will
automatically cut up the large texture into a bunch of small brick-sized textures. Fixed a
bug where you would hit musical brick #1, then hit musical brick #2, then hit another
musical brick #1 and the second musical brick #1 wouldn't register as a musical brick.
Does that make sense? Fixed a bug where if the game spawned a radioactive ball and you had
the button held down, it would instantly release radiation. Added instructions for "Apply
Texture From Bkg" to the html level editor doc.
6-30-99
Changed "Dino Trouble" to "Dino Mite". Wrote a shadow drawing routine for textured bricks
so the shadows won't always be rectangles (in the case of textured bricks that have trans-
parent parts to them). This allowed the shadows in Dino Mite to follow the bricks precisely.
7-2-99
Added "Can you get them all" bonus level. Artwork for this level still needs to be added.
Released ß3.
7-3-99
Played around with some level design. Thinking about making teleporters as musical brick
prizes. Also, thinking about being able to teleport to different levels by uncovering
secret teleporters. Drew a new bkg for "Good Luck" level.
7-6-99
Fixed problem where you would sometimes get the error message, "no texture exists with this
offset".

Took a break. Family visiting from out of town

7-10-99
Made game start off with 4 balls instead of 3.

Took another break. More family visiting from out of town. previous family left.

7-14-99
Did some thinking about the musical bricks. I'm considering identifying them plainly because
they're just too hard to figure out when they're hidden (especially on the later levels).
7-15-99
Made it so musical bricks always identify themselves. Needed to be able to turn off the
identification sometimes (like in the radioactive level) so I had to add a field to the
brick datastructure. This caused me to have to convert all the levels so that they had the
updated brick structure. Started drawing some musical note artwork. Pondered how and when
the bricks will identify themselves. Should all musical bricks be identified simultaneously
or should only the current hit number be identified? Found a bug where if you resume a saved
game that had an active pink ball, it would start blowing bubbles. Had to add a field to
the ball datastructure so that it sould save out whether or not the pink ball was spent.
This caused me to have to convert all the levels again to handle the new ball datastructure.
Fixed a bug where the level jump dialog box wouldn't show the bonus levels when you called
it up while on a bonus level.
7-16-99
Started writing the code to handle identifying the bricks that have musical notes. I added
a musicLink field to the brick datastructure so that I could link the musical bricks together.
This makes it so the game doesn't have to search the entire level for the musical bricks
(potentially causing a stutter in the frame rate in levels with a lot of bricks). Instead,
it can walk the linked list of only musical bricks. Fixed a bug where the paddle wouldn't
deflect a ball at the start of a level if you finished the previous level with a red paddle.
7-17-99
Drew animated music note artwork. Imported artwork into game. Made music notes appear over
bricks matching CurMusicNum. When CurMusicNum changes, those notes get erased and new notes
get positioned over bricks maching new CurMusicNum. Added a checkbox to the brick attributes
dialog box so the user can specify that they don't want a musical brick to be identified by
a music note. This allows me to hide the musical bricks in "RadioActive!" that drop the
radioactive balls. Took "Show Musical Bricks" out of the tools menu. Now it always shows
the musical bricks whenever you enter the level editor. Took relating text out of the level
editor HTML document.
7-18-99
Fixed a small bug where the music notes wouldn't show up on a new level until after you hit
a brick.
7-19-99
Fixed a bug where selecting "New Brick" from the level editor would create a brick with
incorrect sound values causing the sound manager to play a bunch of garbage when that brick
got hit with a ball. Created a really cool level. No name yet. For now, it's called "test".
Updated MacBrickout web page.
7-20-99
Drew gold music note artwork. Changed game so that musical bricks with prizes show a gold
music note. Music brick w/o prizes show a green music note. Created "Try Hard", "Power
Tower" and "Wall Flowers" levels. Ran into frame rate jittering problems due to the large
number of gates in "Power Tower". Since the gates don't really move, it's kind of pointless
redrawing them each frame. I'm probably going to make the gates bricks instead of sprites.
This will require a good amount of coding... Bah!
7-21-99
Made it so when you select "Arrange Levels", it comes up with the last level you were on
selected. Released ß4.
7-22-99
Started working on redesigning the gates so that they don't take up so much CPU time (they are
currently being redrawn every frame). Texture manager's going to handle drawing the gate texture.
Had to modify texture manager slightly so that I could pass in an address of a texture instead of
just passing a texture offset. This allows the source of the texture to either come from the user
imported textures or from the built in sprites. I want the gates to come from the built-in sprites
so that users don't have to import gate textures into every level they design.
7-23 to 7-26
Completely redesigned the gate datastructure. Changed tons of code. Opened up a whole can of
worms. Nothing worked. Reverted back to original design.
7-28-99
Slowly moving gate info into brick datastructure... Unioned the Brick and Gate datastructures since
gates are essentially bricks. Ok. Datastructures are set. Code compiles. Gates are totally
disfunctional. Gate.cpp is completely useless. Gates are bricks. I'll start rebuilding functionality
tomorrow. All this to maintain a smooth frame rate. Sheesh! 3:06am. I'm zombied!
7-29-99
Got "Add Gate" working again. Option clicking gate to rotate works again. Gate attributes working
again! When saving and loading levels, gates not working... Since gates are now bricks, I'm
thinking that I can have the gates saved for free when all of the bricks get saved... Gotta think
on this some more. Yawn...
7-30-99
Made the gates get saved for free when the bricks get saved. Gates behave like bricks still.
There's my next task... Ok. Gates behave like gates (ball bounces off of them w/o destroying them).
Now I need to make them open and close but I'm fadin' fast. This will have to be tackled tomorrow.
7-31-99
Made it so gates can't be sized along the wrong axis (horizontal gates can't be sized vertically).
Setting Max value in Gate Attributes dialog works now. Max field now shows correct value when
initially calling up the gate attributes dialog. Gates now operate correctly (yay, and they don't
get drawn every frame wasting valuable CPU time!!!). Gates now get saved out correctly in levels
when you save a game. You can even save a game as a gate is opening or closing and that info will
be remembered. Fixed a trigger switch bug where the state of the switch wasn't getting saved when
you save a game.
8-3-99
Fixed a texture drawing bug that appeared when you selected the 640x480 game area inside of a
1024x768 screen. Made wacky setting get saved in preferences.
8-4-99
Fixed a bug where the bonus icons weren't getting displayed in the correct spot in the high score
dialog when you were set to 1024x768 mode. Added functionality to allow teleporters to vaporize
when they reach the end of their path. Hopefully will add fun to some levels. Added an End Game
confirmation Alert since it's easy to hit command-E when you're indending to hit command-R. Ran
into a problem when a teleporter gets deleted. All the indices of who links to who get messed up.
Wrote a routine to correctly update the linkTo indices after a teleporter gets deleted. Added a
HitGate sound. Will run it by Elizabeth for final approval. YES! Final approval given. Added
ALERT that comes up when user has reached level 10 that tells the user how to access the SECRET menu.
The ALERT will only come up once per user.
8-5-99
Now, upon leaving ArrangeLevels, the game resets to level 1. Got a new host for my website. Uploaded
all data to the new host.
8-6-99
Added "Watch Out" level. Wrote a ton of the instruction manual in HTML format. Had to cut up and
import a bunch of GIF images from my MacBrickout sprite database.
8-7-99
Fixed a bug where an ASSERT would falsely trip when you paused the game and started a new game when
teleporters were on the screen. Fixed a bug where previews weren't working when selecting a bkg
texture for a level from another level. Created the Maze level.
8-8-99
Fixed a bug where bricks defaulted to music note being turned off. Did some major tuning on the Maze
level. It's getting to be pretty fun. Made it so that if a ball gets stuck in a gated area, the game
only opens the most recently hit gate instead of opening all of the gates. Finalizad Maze level.
Decided to go ahead and implement my idea where registered users can pick 1 of 9 levels to play. When
they complete that level, they get to choose from the remaining 8 levels. When all 9 are completed,
the next batch of 9 shows up. So now, people will be able to do levels in any order but they still
must complete all levels in order to get to the game ending. Added AIM_FOR_LEVELS option in OPTIONS
menu. When checked, users can choose their own levels. If unchecked, levels are progressed
sequentially. Made it so this item is dimmed in the unregistered version. Added field to preferences
file. Made game save the state of AIM_FOR_LEVELS in the prefs file. Added code to prevent unregistered
users from hacking the prefs file to enable this feature. Created "Pick A Level" level. Saved this
level's resources inside the MacBrickout application. Added LevelSelect.cpp. Made MacBrickout able
to pull level resources out of a level file or out of the MacBrickout app. Made MacBrickout display
a different opening screen depending upon the AIM_FOR_LEVELS setting. Added CreateThumbnail() which
creates a tiny 100x75 thumbnail PICT of the level for use in AIM_FOR_LEVELS. Created thumbnail pictures
for all levels (edited and saved each level). Made the first 9 levels show up as thumbnails on the
"pick a level" screen. Looks cool! Got it so that the correct level loads when you hit it with the
ball. I'm pooped. 2:06am. Will continue tomorrow...
8-9-99
Got thumbnails working. Whichever one you hit is the level you get to play. There are still several
minor issues I have to address -> 2-player mode needs to show the correct thumbnails for each player,
also the "Level" indicator in the high scores dialog box becomes meaningless in this mode... Made it
so any deleted thumbnails reappear when you start a new game. Oops. I had caused a bug where the
display shifting got all goofed up. Fixed it. If there's less than 9 levels in a level group, some
of the bricks (thumbnails) would get drawn without any levels on them. Now those bricks get deleted.
Got game ending detector working in thumbnail mode. When you complete all 9 levels on the thumbnail
screen, it now loads up the next 9. Had a thing in there where I can hit the CTRL key to drop into
the debugger. One of the beta tester's joysticks was mapped to that key and was causing their computer
to crash. Changed the debug key combination to CTRL-OPTION.
8-10-99
Fixed a bug where the shadows didn't look right on the thumbnail level. Removed the shadow representation
of the background PICT from all of the levels (I now calculate my own shadow in the code). This reduced
the size of the game by over 200K! Ok, now the high score dialog puts a # in front of the level number
to signify that you played the game in thumbnail mode and that the level number is the total number
of levels you completed and not the highest level you achieved. If there's no # in front of the level
number, then you played the game in regular mode and that's the highest level you achieved. Made game
update the screen instantly after you select the AIM_FOR_LEVEL option. Created 2 thumbnail arrays,
one for each player. Now the game can remember which levels each player has already played and not
display them on the thumbnail screen. End game detection is kind of sloppy -- especially in 2-player
mode and especially if bonus capsules were caught on the last level and there are no more bonus levels
to play. Brain is foggy. Will lay the logic out on paper tomorrow and rewrite...
8-11-99
Took a break from programming. A bunch of repairs came in so I plowed through those all day.
8-12-99
Fixed a bug where you caught a red X capsule in a bonus level and died -- started next level and first
capsule you caught gave you 25000 points! Some people might have called this a feature. Fixed a bug
where game wouldn't go into a bonus level in thumbnail mode. Fixed a bug where catching an exploding
fruit with the paddle would trip an ASSERT.
8-13-99
Came up with a cool bomb ball level. Haven't named it yet. Fixed a bug where the shadows of textured
bricks didn't creep up the right wall as they should. Found a bug where a newly spawned bomb ball will
immediately go off if the mouse button is held down. Will fix this next.
8-14-99
Fixed the bug where the bomb ball would go off if the mouse button was already held down. That would've
been annoying! Did some more work on the instruction manual. Decided to name the bomb ball level
"Bomb's Away". Almost finalized "Bombs Away". Fixed a bug where the music notes would show up in the
unregistered version. Made it so bomb balls were available in Bombs Away for unregistered users (so
they could get past the level). Made it so the clam shell doesn't appear until you catch 3 clear
capsules in a row (used to be 2).
8-15-99
That sound bug re-exhibited itself (where it plays a bunch of continuous gak out of the speaker). The
thing happens like once every 2 months! I threw in a couple of ASSERTS in hopes that I can find it
before release!
8-16-99
Shot some new textures for backgrounds. Tiled and prepared backgrounds for the game. Imported the new
backgrounds into some levels. Created a new "don't touch the walls" bonus level. Drew a background
for bonus levels. Fixed a bug where a newly placed ball's velocity was set to 0 instead of 300.
8-17-99
Made it so the state of the thumbnails (which levels have already been played) get saved when the user
saves a 1 or 2-player game. Fixed a bug where you'd get a bunch of annoying SysBeeps() when you
completed a bonus level. It turned out that the modal dialog was beeping because there were a bunch
of spurious mouse down events in the event queue from the previous level. A FlushEvents() call remedied
the problem. Added an icon that comes on when the sand is dirty -- in case you missed the dirty sand
alert sound. My stamp-sprite-into-underlay routine wasn't accounting for the sprite's hotspots. Fixed.
Removed gold bricks from bottom of thumbnail level. They were pointless. Created a new "Lost Ball
Mania" level.
8-23-99
Drew a new border for "Wall Flowers" level. Tuned up "Lost Ball Mania". Redesigned "Rocks". Fixed
a bug where the musical bricks wouldn't identify themselves in edit mode. Drat! Made a cool level and
saved it without all of the brick layers turned on. Found a bug where only the currently displayed
bricks get saved. I lost all of the bricks in the other layers! Drat! Grumble grumble. Fixed the
bug so it won't happen to anybody else. Now I have to go redesign the level. I guess I'll look at the
bright side -> it always comes out better the second time... Ran into a problem where I had gotten 2
balls trapped in a gated area and I lost the 3rd ball in the sand. The gates never opened to release
the 2 trapped balls. Found the cause of the problem. Hmmm. I need to rethink the gate A.I. I'm
going to try to get 2 levels done per day. Hard part is going to be coming up with the artwork. Still
shooting for a summertime release but that leaves me less than a month!
8-24-99
There was another place in the debug version of the code that tripped a Debugger() statement if the
control key was held down. Changed it to control + option. Hitting a captured umphee bubble with a
ball or laser gives you lots of points. Hitting the captured umphee bubble with the paddle gave you
no points. Now it gives you some points but not as many as hitting it with a ball or laser. Finalized
"Bombs Away". Redesigned "Rocks" again. Created "Specks" and "Short Circuit".
8-27-99
Did some more work on the instruction manual. It's nearly complete!
8-29-99
Drew some new backgrounds. Fixed a cosmetic bug where a high multiplier value would run into the
"Score:" text in the score bar. That frigging sound bug came back. Previous ASSERTS didn't catch it!
Littered the sound routines with more ASSERTS so I can surely catch it next time it occurs. The level
editor had a bug where it would trip an ASSERT if you duplicated a group of bricks that had 1 or more
gates in it. Fixed. Created "Rainbow Road" level. Cleaned up a little garbage in the gold music
note animation. Finalized "Specks".
8-30-99
Tuned up and finalized "Hit the Red Triggers". Finalized "Lost Ball Mania". Added instructions on how
to operate the "Border Attributes" function in the level editor.
8-31-99
Touched up the radiation ball artwork and the caged ball artwork.
9-1-99
Added squish sound. Finalized "Retro" level. Added some more info about musical bricks to the
instruction manual. Also added info on how to register the game. Placed some super secret hidden
musical bricks in some levels. Renamed "Specks" to "Confetti". Renamed "Maze" to "Carnival". Made
"Short Circuit" a lot more fun by adding a couple of teleporters. Finalized "Welcome to MacBrickout"
level. Added discussions about frequent players and the options menu to the instruction manual.
Created "Green Bricks Add Time" bonus level.
9-2-99
Fixed a bug where the collision detection would cease to function if you caught too many slow capsules
in a row. Started developing screenshots HTML file. Wrote code to facilitate taking screen shots. It
basically grabs an image of the screen right before it draws "PAUSED" on the playfield.
9-3-99
Sampled and added c.s. sounds. Programmed c. close and capture ball functionality. Added
c. release pball functionality. Redrew pball artwork. Added pball functionality.
Whew! That was complicated. Removed clear ball from game. It's dead. Removed clear ball from
instruction manual. Made some other minor changes to the instruction manual.
9-4-99
Fixed a bug (caused by removing clear ball from game) that caused "Radioactive" to generate the wrong
balls in its musical bricks. Released Beta-6.
9-5-99
Fixed a bug where pball mode would stop working if you caught another capsule. Fixed a bug where the
ball would freeze if you were holding it (via catch) while you caught a red-x capsule. Glad I found
this one! Made the pball get stamped into the border when pball mode is activated. Made it so
preferences always goes into preferences folder. Before, it would go into the MacBrickout folder if
possible but whenever you replaced your MacBrickout with an updated version, you'd invariably overwrite
your preferences file and lose all of your frequent player info.
9-6-99
Created "Bombs" bonus level. A beta tester found a bug where you could trap a ball in a particular
gated area and the gate would never open. Problem turned out to be incorrect gate data in the level
file. Replaced the gate and the problem went away. Pointed a couple of mac gaming websites to the
MacBrickout screen shots. That gate problem is bugging me. There has to be something in the code
which is causing the curLength to differ from the maxLength on a closed gate. Ah, found it. If you
resize a gate by using the Shift-Arrow keys, the maxLength field gets updated to the new size, but the
curLength and desiredLength fields don't get updated. Fixed! Went through all of the levels and found
(and fixed) all gates containing inconsistent length data.
9-7-99
Added more bomb bricks to the "Bombs" bonus level. It was way too hard. Now, it's a lot more fun. I
noticed "Confetti", "Rainbow Road", "Short Circuit" and "Rocks" were missing vital nutrients (namely
fruits and vegetables). Corrected that minor oversight. Talked about scoring in the instruction
manual.
9-8-99
Did some more work on the instruction manual. Looked at what it would take to allow users to put
'snd ' resources in the level files and have those sounds show up in the level editor. That way, people
could add their own brick sounds to the game. Hmmm. It would require a good amount of time to implement.
I think I'll hold off and maybe implement this feature in a later version. Went through all of the
levels and cleared out a bunch of textures that were no longer used. Levels 1-19 are pretty much
finalized. I'm figuring I'll need about 8 more levels and 2-3 more bonus levels.
9-9-99
Most of my day was taken up by the cable installers hooking up my new cable modem! Whew! No more slow
internet connections. Drew a target texture for the bricks in "bombs away". Hmmm. Don't know if I
like it. Might give it another shot tomorrow. Created "Half and Half" level.
9-10-99
Drew a new target for "Bombs Away". Looks much better! Made some significant changes to "Rocks" after
one of the beta testers voiced some concerns about its difficulty. Tuned up "Half and Half". Elizabeth
proofread the instruction manual (all but the level editor stuff). Gosh, I think I may be done with
the instruction manual! Thinking about posting the instruction manual on the website... What's left?
3-7 more levels, 2-3 more bonus levels, game ending, a few more brick sounds, treasure chest and gold
coin functionality, "Apply from other level" functionality in border attributes section of level editor,
place fruits in 3.0 levels... I'll try and tackle the brick sounds, treasure chest and gold coin
functionality and hopefully "Apply from other level" this weekend. That will give me all next week
to come up with the remaining levels. Week after, work on game ending. Should be pretty close to
release after that. Came up with cool idea for "Plumber" level. Also got cool light bulb level idea...
9-11-99
Got special umphee mode working. He..he..
9-12-99
Got rid of the "Apply from other level" texture management function. Drew stationary coin artwork and
imported it into the game. Got game to display proper coin icon in the border. Got coin status for each player
to save and reload during save-game and load-game situations. Decided the high score achievements needed revamping.
Drew a bunch of achievement icons and added them to the game. Changed the datastructure to accomodate 22
achievements even though there are only 16 bits to represent them. Before, it was one bit per achievement.
Added code to submit the various achievements based on cool things the player does.
9-13-99
Removed gold ball stuff from game. Sampled coin flip sound. Sampled a couple more umphee sounds. Imported sounds
into game. Added Sound::Cancel() so I can cancel a queued sound before it starts playing. Argh! I keep losing
my balls. My mouse is dirty again! I just cleaned it yesterday. Sampled some more brick sounds. Discovered
and fixed a bug where the game wouldn't remember what multi-hit sounds you've selected for the multiple hit bricks.
Added information about "achievements" to the instruction manual. Fixed a bug where creating shadow bricks would
trip an Assert(). Documented how to create shadow bricks in the instruction manual. Fixed a long time bug where
3D bricks (the ones with the light and dark edges) wouldn't redraw properly when a portion of them was uncovered
by a disappearing brick. Instead of redrawing just the portion that was uncovered, it redrew the entire brick
which would hose any other bricks that were overlapping it. This problem is now fixed! Made it so multi-hit
textured bricks flash just like their non-textured counterparts when they're hit with a ball. Added the screen
shots link to my home page.
9-14-99
Drew background for pipes level. Drew some brick artwork for pipes. Added the ability to the level editor to
allow the brick shadows to be turned off for selected bricks. Drew the rest of the artwork for pipes. Placed all
the bricks. Finalized Pipes. Hmmm. I need the ability to turn off the flashing on multi-hit bricks... Added
a description of the brick attributes shadow checkbox to the instruction manual. Oops. Forgot to initialize the
ShowMusicNum and drawShadow fields of the default brick datastructure. The result was, sometimes you'd place
a new brick and those fields would be undefined causing the shadow or music note to sometimes not appear. Fixed.
A beta tester found a problem with catch. You can catch a ball underneith the paddle. If you have full up-down,
you can push the ball down into the sand. If you release the ball then, you'll lose the ball in the sand. This
doesn't seem fair. I'll need to fix this...
9-15-99
Changed the catch routine to always force the ball on top of the paddle. While I was in there, I forced the ball
to always make contact with the paddle horizontally too (so it won't be hanging off of one edge with lots of space
between the ball and the paddle). Wrote a compression/decompression routine for the sounds. I reduced the size
of the sound data by half.
9-16-99
Fixed a bug in the sound decompression routine where the offsets were being calculated incorrectly. Works great
now and the game is about 500K smaller! This will decrease download time for people and reduce the risk of me
hitting my maximum download quota set by my ISP.
9-17-99
Made it so users can replace any sound in the game with their own, simply by adding a 'snd ' resource with the
proper resource ID to the appropriate LEVL file. Posted the instruction manual on the web page. Fixed a
bug where a custom sound installed in one level would play in the following level (forgot to purge my sound
buffer, duh). Wow. Found a crash bug. I was purging the alternate sound buffer before the alternate sounds
were finished playing. Fixed.
9-18-99
Achievement sound was delayed 1 second when opening a gate. Fixed. Released Beta-7.
9-19-99
Hmmm. Identified an obscure bug dealing with textured multi-hit bricks with transparency where garbage gets left
on the screen after the brick flashes in the area where there was transparency. I need to add a flash option
to the brick attributes dialog... Added the ability to turn flashing on or off for multiple hit bricks. This
made the pipes level look a lot better! I had to go through all the levels and set the flash attribute for each
multiple hit brick (since that field was previously an undefined pad field in the brick datastructure). Created
light bulb level, drew ligh bulb artwork, etc. Hmmm. Don't know if I like it. Will try tuning it up later.
9-20-99
Changed the artwork for the avacado, coconut and pink achievement icons. A problem was found with the thumbnail
mode where, after completing around 10 levels, the ball no longer detects a collision with the thumbnails. This
is really bad since it basically means the end of your game. I'm giving this top priority.
9-21-99
Whew! Fixed the bug where the ball would sometimes go clear through thumbnail bricks. Fixed a bug where the
brick shadows were the wrong color sometimes (this was due to an optimization I had made a few days ago when I
was working on the flashing brick code for the pipes level). Fixed a bug where the high scores wouldn't record
how many levels you achieved when playing single player thumbnail mode. Drew a sort of cool level. Needs tuning.
No name yet. Found and fixed a crash bug that happened when a sprite went off the top of the screen. Geez. I
can't believe I didn't spot this earlier! Discovered that I would have run into the same problem if a sprite had
gone off the left side of the screen. Fixed. Bottom and Right sides were already taken care of.
9-22-99
One of the beta testers found a crash bug where instead of the special achievement sound playing, you hear a sort
of machine gun sound. Gameplay continues normally, but as soon as you try to pause the game... Crash and burn.
I put together a special build with many of the special powers enabled since it's looking like it only happens
when a lot of stuff is enabled and flying around on the screen. So far, I have been unsuccessful in duplicating
the problem here. I have a hunch that even though it appears to be sound related, it's something else... Going
to try a few more things tomorrow. A friend of mine gave me a great idea for the game. It's just too cool not
to implement. Started drawing the artwork. This is one of those finishing touches the game needed.
9-23-99
Implemented "Aye ball" functionality. Drew and added necessary achievement artwork. Added clamOpen achievement
icon. Created "Strange" level. Needs tuning. Ug. No progress on the rare crash bug mentioned yesterday.
9-24-99
Felt bad, didn't get any programming done. Made some rebar cages to reinforce some concrete footings.
9-25-99
Tuned up Bombs bonus level. There was a brick that, when hit, would create a cavity that would cause the ball to
deflect in the wrong direction. This would cause a chain reaction where ALL of the reserve bomb bricks would
release bomb balls. Although it looked cool, it would certainly mean the user wasn't going to pass the level
successfully. Took it easy yesterday and today in the MacBrickout programming department. Haven't had a break
since the 28th of August. May take it easy tomorrow, then resume full force on Monday.
9-26-99
Took it easy today. No programming.
9-27-99
Made freeware versions of MacBrickout 3.1.2a and 3.1.2a(J). Called it MacBrickout 3.2. Haven't decided if I'm
going to release this version yet, but if I do it'll be ready. Boy, that was some of the worst code I have seen
in a long while. I can't believe I wrote it! Fixed a bug where the gate shadows wouldn't get drawn after the
gate started opening. Gave "Lost Ball Mania" a face lift. Colors were boring. Now they're not! Need to tune
up and finalize "strange" tomorrow.
9-28-99
Started adding the "authorized level" stuff. Level groups that are "authorized" will allow the game ending to
show. Users who make outstanding level sets will be able to have them authorized / officialized, increasing the
chances that other people will want to play them. Added some teleporter randomness to "Catch the Teleporter".
This improved the fun factor for this level. Changed the color scheme of "Radioactive". I'm trying to find the
balance between challenge and frustration with the ball speed throughout the levels. Ultimately, I want maximum
challenge with zero frustration. I don't want a level to feel impossible because the ball's going too fast. I
played through all of the levels. There are a few places where the ball gets going too fast. I'll have to
re-examine those areas tomorrow and maybe slow the ball down a bit. Game Ending, Last 5 or so levels, final
tuning. That's my focus now.
9-29-99
Designed a way cool level (no name yet) involving lots of balls. Problem is, MULT gets way too high way too fast.
You can rack up half a million points easily on this level alone which totally unbalances the scoring throughout
the levels. I don't want to *NOT* have levels with lots of balls, so I think the solution is to be able to turn
off the MULT on certain levels. With the MULT off, this level would be fair (to the other levels) and would
definitely be a keeper. Will implement MULT on/off functionality in the level editor tomorrow. Will also name,
tune up and finalize this way cool level tomorrow. Slowed the overall ball speed down a bit. I'll have to play
a few more games to see how the gameplay feels.
10-1-99
Implemented MULT on/off functionality. Decided I didn't like it. With the MULT off, you lose the challenge of
trying to avoid balls with the paddle (in order to let the MULT increase further). So I compromised by allowing
the MULT to still function on levels with lots of balls, but its effectiveness is reduced. This works out a lot
better! Added "Reduce MULT" to the level editor. Updated the instruction manual.
10-4-99
Finalized that cool level from 9-29. It's called, "Ants". Made it so if you pop a bubble with a caught ball,
the ball won't leave the paddle in some funky direction. Did some tuning on "Lost Ball mania", "Bombs Away",
and "Wall Flowers". Played through the game several times, looking for bugs or other anomolies. Found a few and
jotted them down. "Strange" is still bothering me. The level is boring. I'll try to come up with something
clever for that level tomorrow, else I'll cut it.
10-5-99
Made spazzing umphee not dive into the sand when he hits certain balls. I'm going to have 4 full solid days of
MacBrickout work coming up on Thursday (family's going out of town and leaving me behind). Came up with a game-
plan. My goal is to take it to 99% complete.
10-6-99
Took a break from programming. A bunch of repairs came in and I needed to get caught up. Also, I felt that it
would best to get my mind off of the game for a day before diving in for 4 straight long solid days of MacBrickout
work starting tomorrow.
10-7-99
Added "Smokin' Aye" sound effect. Had to fix a bug in the sound compression routine where the byteCounts were
overflowing. Bug didn't show up until now because the byte counts would always finish before 65535. Now they're
scaled down by the max count so they'll never overflow. Found and fixed a bug where in a 2-player game, MacBrickout
would not remember the fruits achieved by the previous player when it switched players. Added the all-time
achievements section to the high scores dialog box. Now if you score an achievement that you've never obtained
before and your score isn't high enough to make it in the high scores list, you'll still get to log your achievement
as an "all-time" achievement. Whew! That was a lot of code.... But it was worth it! Tomorrow. Levels, levels,
levels. I gotta finish up the levels. Armed with a digital camera, I'll run around outside and shoot a bunch of
textures. Hopefully I'll get inspired!
10-8-99
Designed "Autumn". This included drawing all the artwork and placing the bricks.
10-9-99
Tuned and finalized "Autumn". Tuned and Finalized "Capsule Cage".
10-10-99
Day off.
10-11-99
Writing e-mails back and forth with Apple, trying to work out a licensing agreement with Drawsprocket.
10-12-99
Still dealing with licensing issues. Started drawing the 4.0 splash screen. Fixed a bug where the user's
all-time achievements sometimes wouldn't show up. Made the clam shell appear a little sooner than before to make
the game a little more interesting... Updated the instruction manual to reflect recent changes in the game.
10-14-99
Got an idea for a level involving this big machine that has.... Well... I don't want to spoil it. Began drawing the
7-segment displays that will be used on this mystery machine.
10-17-99
Drew a whole bunch of artwork for a cool techno level.
10-18-99
Incorporated yesterday's artwork into a new level. I'm calling it, "Control Panel". Tested, tuned and finalized
"control panel". This level is quite cool. I'm thinking of making it the last level in the game because it's
about as challenging as the last level as MacBrickout 3.x plus the theme of the level will tie in nicely with the
game ending. Getting the urge to release the next (and hopefully final) beta.
10-19-99
Played around with the level order. Made "Control Panel" the last level. Added "C" key functionality. I think
I need one more level, then I need to massage the bonus levels. They need some work. My ideas for the game
ending are coming together... FINALLY! There are still some loose ends. Once those get tied up, the coding
should go pretty quickly. No bug reports from the beta testers.
10-20-99
Started working on treasure chest functionality. Got a demo of "SpotLight" from Onyx Technology, Inc
(www.onyx-tech.com/). This program thoroughly monitors your application and reports any potential memory leaks
that could cause the application to crash. I ran it on MacBrickout and it found several "suspicious" memory
accesses, passing unlocked or NULL handles to toolbox routines, etc. Started fixing all of these bugs.
Hey, SpotLight is pretty cool!
10-21-99
Treasure chest functionality completely drawn out on paper. Incorporated different states in the coin engine.
Tomorrow, wall spawning plus I get to use "time = sqrt((2*height)/accel)".
10-22-99
Yay! Treasure chest functionality completed! Sampled 2 sounds associated with the treasure chest. Implemented
the splash screen! Great progress today! Woo hoo!
10-23-99
Fixed a bug where coins that were stamped into the border wouldn't appear there after you completed a level and
the next level was drawn.
10-24-99
Sampled some computer sounding sounds for the control panel level. Imported them into the level, but then the
game would crash when it tried to draw the background. None of my ASSERTs tripped. Hmmm. Thinking it was a
memory thing (the bkg is a full 640x480 pict), I increased the memory requirements to 6megs. Still crashed.
Took one of the sounds out and then everything worked fine. There might be a bug in the sound code where it's
overwriting the bounds of the memory allocated for the level sounds. I'll have to look into it tomorrow. Changed
the color scheme for Bulls Eyes.
10-25-99
Added "10 hidden bricks" bonus level. Changed the gold tile into a gold nugget. Two more bonus levels to go...
10-26-99
Made some changes to the text that appears in the green help window. The text should pretty much be finalized now.
Fixed the sound bug I encountered a couple of days ago. I wasn't setting the size of a handle correctly.
Successfully imported the new sound effects into the "Control Panel" level.
10-27-99
Discovered that the full paddle range functionality for the bonus levels had never been implemented. Fixed!
Created a "Don't touch the walls" bonus level. Argh. can't-touch-walls functionality wasn't working either.
Fixed. Made some corrections to the level editor doc.
10-30-99
Found and fixed a ton of bugs that were causing incompatibilities with DrawSprocket 1.7.2 (the one that ships
with OS9). I'm still seeing a little graphic glitch from time to time. It looks like it happens right before a
ball hits a brick. I probably have missed one. Will check into it tomorrow.
10-31-99
Updated the sound replacement numbers in the instruction manual. They changed after I had added a bunch of sounds
to the game. Finished red-umphee ball mode. If you get the red umphee ball when there's more than half of the
bricks left in the level, you'll only get to use the red umphee ball until the end of the level. If less than
half of the bricks are left when you get the red umphee ball, you'll get the use it for the entire next level.
Laser capsule was too rare. Made it fall a little more frequently. Moved the pBall identifier into the top-right
corner of the screen. Tuned up all the original 3.x levels. They new have fruits & vegitables as well as musical
bricks. Bonus levels are now correctly defined. Released Beta 8.
11-1-99
Tuned up final bonus level. Found and fixed a bug in the help screen text display code. Some of the beta testers
reported some minor problems with beta-8. Fixed them. Fixed a bug that showed up in a multiple monitor
situation. If you clicked "cancel" on the multiple monitor dialog box, the game would crash. Duooh!
11-4-99
Found and fixed a bug where you would lose your pball mode if you lost a ball on a bonus level.
11-5-99
Discovered that the 2-player mode was totally broken. Found and fixed the bug. I don't understand how it ever
could have worked. I must have accidently deleted a line of code at some point. Cleaned up and tested all of the
2-player code. Made it so "GOAL" isn't displayed on bonus levels in 2-player mode. Some bonus levels have timers
which would overlap the goal. Updated the instruction manual with some info about 2-player games.
11-6-99
That stubborn sound bug came back. Since I'm able to detect that it happend, I added some code that would shut
down and reset that particular sound channel if the bug occurs. That way people won't hear the annoying garble.
Modified "Hit the red triggers" slightly to increase fun factor. Fixed a bug where the top-left corner of the
border didn't get drawn correctly when coins were stamped up there. Doubled the clean sand bonus. Now it's
worth 40 times the number of bricks in a level. Made it a lot easier to open the chest the 2nd time around.
11-8-99
Placed the remaining fruits and vegetables throughout the levels. Added the juggling achievement badge. Had to
increase the size of the datastructures to accomidate the new icon. Wow. Found and fixed a crash bug. I was
releasing memory after I was done with it, then later on, I was releasing it again. The memory manager didn't
like that too much...
11-9-99
Increased the amount of time a bubble spends in the sand. Swapped "Catch the Teleporter" and "Rainbow Road".
Rainbow Road is quite fun and I felt it should be moved up in the level order. Created an ad banner that will go
up on a couple of the mac gaming websites.
11-10-99
Found a fixed a bug where any of the newly added achievements wouldn't show up on the all-time achievements. I
had previously increased the size of the achievements bitfield from a tU16 to a tU32 but had forgotten to make the
change for the all-time achievements.
11-11-99 to 11-18-99
Went on a very enjoyable vacation to Hope, Idaho.

11-19-99
Created a special version of MacBrickout for Fedde Middle School.
11-20-99
Made a new MacBrickout 4.0 web page. Went through the entire game, removed all debugging stuff, checked all
functions and made sure the game is ready for release. Fixed a bug where garbage would be displayed at the end
of the green help text. Created a new database for 4.0 registered users. One of the achievement icons was too
big, causing garbage to be left on the screen when you option-clicked a line in the high score dialog box. Changed
the size of that icon to eliminate the garbage. Fixed a bug where a brick set to always drop a special capsule
would drop a capsule that looked like a ball (weird) in the unregistered version. Now it defaults to an up/down
capsule. Found and fixed a bug in the registration form code. Thanks Rick for helping me find that!
11-21-99
Released MacBrickout 4.0


11-22-99
Someone complained that their computer crashed (OS9) after saving the registration form as a text file. I made
some changes to registration.cpp in hopes of eliminating that problem. If DrawSprocket couldn't find a display
context (happens on some machines for some reason which I don't understand. These machines are perfectly
capable of displaying a 640x480x16 context), MacBrickout would crash with an error type 2 right when you tried to
launch it. I now handle this error correctly and display an error dialog box for the user. I noticed that an
older version of DrawSprocket (version 1.1.4) has no problems finding the context on these machines. Decided to
include 1.1.4 with MacBrickout instead of 1.7.2.
11-25-99
Put the proper sounds in the control panel level. They never made it into the 4.0b release. Fixed a bug where
the frequent players option was available in the unregistered version. Some people reported that they'd hear
a loud static sound and eventually MacBrickout would crash. Took one long hard look at the sound code and found
a potential problem. It looks like the problem is being caused by the linked list of sound channels being modified
by both the main code and the interrupt code. Changed it so only the main code modifies the links in the list.
This should hopefully squash the sound bug.
11-26-99
Ran into a problem where invoking 2-player mode in the unregistered version caused the user configuration dialog
box to pop up. Since the user configuration is only available in the registered version, MacBrickout would
eventually get confused and all kinds of undesirable things would happen. For the time being, I disabled 2-player
mode in the unregistered version. Once I have time to find an elegant way to handle 2-player mode in the unregistered
version, I'll reimplement it. Adjusted the size of a static text field in the bonus completion dialog. Released
4.0.1
12-1-99
Fixed a problem where the game would run VERY SLOW on some powerbooks. The problem was due to DrawSprocket
returning a strange value for the monitor refresh rate on those machines. I fixed it by detecting that strange
value (-32768) and returning 60 in that case (for 60 frames/sec).
12-2-99
Fixed a bug where player 2 didn't get their own "balls remaining" value. They just what whatever player 1 had.
12-3-99
Made it so if you hit command-Q during a game, it pauses the game.
12-5-99
Fixed a bug where MacBrickout would change the textMode to srcCopy on the main screen (qd.thePort) which would
cause the text to have little white boxes behind it in dialog boxes of other programs that had non-white
backgrounds. Sheesh! Did that make any sense?
12-6-99
Fixed problem where paddle width wasn't handled correctly in 2-player mode. Re-enabled 2-player mode in the
unregistered version. Made it so it doesn't bring up the select player dialog box in 2-player mode in the
unregistered version. Instead, it just says, "Have a seat Player 1" or "Have a seat Player 2".
12-7-99
Attempted to fix the bug where printing the registration form on some machines crashes the machine. No go. I was
trying to create a SimpleText document, then send apple events to the Finder, telling it to print it. That way
I wouldn't need any printing code in MacBrickout. Unfortunately, it didn't work. More research needed...
12-8-99
Added an extra screen resolution. Now, at startup, you can hold the control key for 640x480 resolution, the option
key for 832x624 resolution and the command key for 1024x768 resolution. The MacBrickout play area is always
640x480 so at 832x624 and 1024x768, the play area will be centered on your monitor. Fixed a problem where the
cursor would be missing when player 2 needed to enter their high score.
12-15-99
Fixed the problem where some registered users couldn't save their game. The problem only happened for people who
didn't set themselves up as a frequent player. I had forgotten to put a LoadGame() call in the part of the code
that handles "New Game" from the FILE menu.
12-16-99
Fixed a bug where the highlight frame that appeared around bricks when you clicked on them in the level editor
would appear in the wrong place on the screen when your monitor was set to 832x624 or 1024x768 resolution.
12-17-99
Some of the levels in the 3.0 level set were out of order. Fixed. Added some more all-time achievement gems.
The score bar wouldn't get drawn when you were in a mode other than 640x480. Fixed.
12-26-99
Started fixing the bug where game wigs out if you pass all of the bonus levels and then catch another bonus
capsule, then try to go to the "next" bonus level which doesn't exist.
12-27-99
Worked on MacBrickout PC contract.
12-28-99
Signed contract with Kirk to do the PC version of MacBrickout. Disabled gems in beginner mode. Started working
on fixing nearly 900 implicit arithmetic warnings in the code. This is needed to satisfy the PC compiler.
12-29-99
Converted display.c to display.cpp. Fixed a whole bunch of implicit arithemetic conversions. Went through all
the code and changed every reference to a CGrafPtr into a reference to an ImageBuffer -- since the PC doesn't use
the CGrafPtr datastructure. ImageBuffer has all the info in it that the Mac version needs and the PC version.
Whew. The game almost works again! It crashes between levels. Will solve tomorrow!
12-30-99
Sent revised code containing ImageBuffer stuff to Kirk. Took private functions out of Display.h. Moved prototypes
to display.cpp. Made cBonus::Spawn take a number, not a string. Moved UserSetTexture() and DrawColors() out of
border.cpp and into LevelEdit.cpp.
12-31-99
made error.c and debug.c into error.cpp and debug.cpp.
1-1-00
Made it so the game stops dropping bonus capsules once the player has finished all the bonus levels. Fixed a bug
where player 2 would get player 1's "re-spawned" warp tunnel. Fixed a bug where if player 2 died after getting a
bonus capsule, player 1 would get to play the bonus level. Added a feature to the sprite cutter where you can
replace an existing pict file in the project. This was needed because the program couldn't find the PICT files
in their old locations (since I moved everything to a new machine and the directory ID's were all different). So
now, I'm able to select "Replace Pict" from the project menu and point the program to the new location of the
PICT. Recut the caged ball gem to fix some garbage that was showing up in the high score dialog.
1-2-00
Investigated using inputSprocket to fix the paddle problems I'm having (can't set paddle speed on USB systems and
on some systems the mouse is extremely fast after leaving MacBrickout). InputSprocket seems way more complex than
it needs to be. I'm really reluctant to use it. Argh! Fixed the problem where the game would freeze if the ball
got stuck in a tight place (like the small openings in level 19). Now the ball detects that it is stuck and changes
its angle of travel automatically. Fixed a bug where passing the final level on a non-factory level set would
prevent the user from recording their high scores.
1-3-00
Changed high score format so that scores are saved out in encrypted format.
1-4-00
Added high score submit button to MacBrickout high scores dialog. Added the dialog box that comes up after you
hit the submit button. Wrote code to convert high score data to base 64 format. Wrote code to copy that data to
the clipboard. Wrote code on the server side to accept and process user entered data. Made server spit out a
different html file if data is invalid. Got stuck on server side code that opens and modifys files. Hmmm...
1-5-00
I needed to set the permissions on the files on the server. Once I did that, everything worked. Finished writ-
ing the code for the high score submission. Made server keep track of a table of high scores, inserting the new
score in the proper place. Wrote code for the server to display the scores. Don't know quite what to do about
getting the server to display the bkg image (since it outputs an html file on the fly). Gotta send some questions
out....
1-6-00
Figured out how to output the bkg image. I was just trying to pull it out of the wrong directory on the server.
Made the high score list appear on the main MacBrickout page. Got all the links working so people can submit their
scores and view them.
1-7-00
Added the ability to support multiple high score lists (one for each authorized level set). This required doing
some major mods to the MacBrickout code so that the particular level set identity could be sent out with the
encrypted high score data.
1-8-00
Made it so only one high score per registered user would get recorded. Redesigned the website to use frames.
1-9-00
Got score table identity working. This means that people can get a high score on any authorized level set and
the score will be placed in the correct high score table.
1-10-00
Ran into problems yesterday where a stale high score page would come up. You would have to force reload the
high score page in order to see the most recent changes. Figured out how to send html tags to make the page not
get cached. I now have a cgi program that spits out the entire page. Added file locking code so that there
won't be any collisions between people reading the scores and people submitting new scores. Imported all of the
bonus achievement icons to the website. Added compile flag to turn level editor off. This will help in the
development of the PC version.
1-11-00
Got all of the achievement icons to work on the high score page. Added comments field to high score submission
form. Wrote a cgi that would display the user's comments. Expanded the datastructure to hold 512 characters of
comments. Made it so if the user has comments, their name would be a hyperlink which would take you to their
comments.
1-12-00
Increased the bonus to 5,000 points for successfully using the bubblegum ball. Got labels working so that you
go back to the correct high score list after viewing comments. Made it so users can resubmit their high score
and change their comments.
1-17-00
Fixed a bug where a person would get a ruby after completing the bonus level that said it gave you a blue
saphire.
1-18-00
Got all the game ending dialogs sorted out. The game was actually displaying the wrong ones sometimes.
1-19-00
Encrypted map file. Made it so MacBrickout displays a warning message to the user if they are about to edit a
level in an authorized level set. The warning tells them that if they continue, they will no longer be able to
see the game ending if they finish all of the levels. Attempted again to support InputSprocket. Failed.
Started working on revamping the Aim For Levels feature.
1-22-00
Fixed the crash bug finally. The sprite shadows weren't being drawn correctly when they intersected the sand and
the right wall.
1-23-00
Got the new aim for levels working. I still need to be able to group levels together so that the last level is
always played last (because it's in a different group).
1-24-00
Made the online high score list display a # sign in front of the level when the user played in Aim For Levels mode.
Fixed a bug where finishing the game in AIM FOR LEVELS mode displayed an incorrect game ending message.
1-25-00
Got the "unauthorized level set" message working in the high score dialog. Disabled the submit button on
unauthorized sets (since there will be no high score list to submit to).
1-27-00
Fixed a bug where your recently acquired fruit wouldn't get saved when you saved your game.
1-28-00
Started working on flattening the saved files so that they would work on both the PC and the Mac versions.
Fixed a problem where MacBrickout would sometimes unregister itself due to a conflict with another program.
2-4-00
Released 4.0.2ß.
2-5-00
Fixed a bug where the clam shell was burried in the sand. Was a side effect of fixing the crash bug with the
shadows.
2-12-00
Added a "Num Games Played" field to the online high score list.
2-15-00
Think I fixed the bug where the timer sometimes wouldn't work in the bonus levels. Looks like it had something
to do with the user saving a game. The number of ticks elapsed would become invalid if they resumed the game
after shutting down the computer (causing TickCount() to reset).
2-21-00
Released version 4.0.2

3-1-00
Fixed a bug where a level set would become unauthorized as soon as you played it in "thumbnail mode".
3-7-00
Fixed a bug where player 2 would start out with one extra ball.
3-15-00
Fixed an infinite loop bug in the sound code that occurred when people added their own custom sounds.
3-19-00
MacBrickout is a more robust in handling a corrupted level map file. Released 4.0.3.

4-25-00
Fixed a bug where random all-time achievements would show up when you selected the all-time high score list
in the high score dialog. Fixed crash bug that occured when the floating bonus points rose up off the top of
the screen. Made it so you can hit space bar to resume a paused game. Fixed a bug where the bonus icons weren't
showing up in the right place when you completed a bonus level and your display was set to a non 640x480 res-
olution. Fixed a bug in texture.cpp where the texture wouldn't show up in the correct location of the texture
management dialog. Fixed a bug where you'd get a bonus completion dialog on a regular level if you paused your
previous game on a bonus level and then started a new game.
5-9-00
Fixed a bug that prevented the chest full of coins from being added to the person's achievements.
5-14-00
Added bonus gem description to Awards.html on the website. Made it so you can click on a bonus gem in the high
score list and it'll take you right to that page. Fixed a bug where once you got the gem of supremacy you would
not get anything after that. Now you get the gem of supremacy each time you win the game since your initial
acquisition of the gem of supremacy. Released 4.0.4.

5-19-00
Added Language menu to the options menu.
5-21-00
Fixed a bug where an ASSERT would pop up when the eyeball hit a brick containing no capsules. The Alert said,
"Group number too high".
6-11-00
Got the language support working. MacBrickout now has a language folder. Users can drop MacBrickout language
files into that folder and the game will support those languages. Fixed a bug where you could quit the game with
a red paddle and then resume your saved game with a gray paddle. Fixed a bug where you wouldn't get the pearl
ball when you paused the game while the clam captured a ball.
6-13-00
Added two new achievement gems (redX and cleanSand).
6-14-00
Fixed a bunch of glitches in the french translation.
6-15-00
Fixed some glitches in the Italian translation. Also updated the splash screen.
6-17-00
Fixed a bug where the word "Guest" would always show up in English in the player menu no matter which language
was chosen.
6-20-00
Made it so happy capsule would fall a little more frequently.
6-21-00
Did some tuning on the new level set.
6-23-00
Added three new capsules
6-25-00
Did some more tuning on the new level set.
6-28-00
Fixed a bunch of bugs in the French version.
7-3-00
Fixed some Get1Resource bugs in level.cpp which was causing the thumbnails not to show up when any language other
than English was selected.
7-6-00
Placed all the fruits and vegetables in the new level set\
7-9-00
Fixed a bug where the high score music would play at the wrong time (when it asked for the user's name)
7-12-00
Added AMEX support to the registration form.
7-21-00
Fixed a bug where the border wouldn't show up in AimForLevels mode if you were playing in any language other than
English. Decided to update the included DrawSprocketLib to version 1.7.4
7-27-00
Beta testers found a bug where the ball wouldn't appear in some levels. Turns out I created a bug when I fixed the
paused-game-ball-in-the-clamshell bug. Fixed the hidden ball bug.
7-31-00
Finished first draft of the Japanese language file.
8-5-00
Made 10,000 capsule a negative capsule. Added new 10,000 sound. Added Mania Levels to online high score board.
Changed limitation in gate attributes dialog from 39 to 255. Made the clean sand achievement only appear after
you've attained 25000 points in clean sand bonuses. Added achievement counters for the redX achievement and the
pink bubble achievement.
8-7-00
Since scoring is a little different between game versions, I added the game version to the high score data. Now
the website shows which version the person was playing when they got that high score.
8-8-00
Finalized new gems (thanks Adam for your help!). Will try to incorporate them into the game tomorrow.
8-10-00
Added 5 new gems to the game. Made a ton of corrections to the Danish translation.
8-15-00
Tuned up Only One Chance and Choose Wisely. Add a bunch of Danish to the Danish language file.
8-17-00
Finalized the last bonus level. It turned out pretty cool. Fixed a bug where your all-time achievements would
get updated even if you didn't start from level 1.
8-23-00
Rearranged the bonus levels a little bit and reassigned the gem prizes. Adam added the monthly high score list
to the online high score section of the website. Released 4.1.